エクセルVBAについて質問です。

下記のページにおいて、回答者1さんの回答でA列でなく、K列のデータを対象とする場合、具体的にどこをどう変えたらよいのでしょうか?
また、最下層にある「追加できるワークシートの数には、限界がありますので注意が必要です。」というコメントについて、限界の具体的な数字で教えてください。
http://q.hatena.ne.jp/1158585432

回答の条件
  • 1人2回まで
  • 登録:2006/09/19 15:13:16
  • 終了:2006/09/19 16:06:22

回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/09/19 15:33:10

ポイント60pt

シート数の限界については こちらを参考にしてみてください。

http://72.14.253.104/search?q=cache:wrcdn2NO7t0J:www.kotaete-net...

基本的にはメモリなども関係があるみたいです。

なので、具体的な数字は その環境でテストしてみるしかないですね。


↓K列に変更してみました。

多分、これでうまくいくのかな?


Sub Macro1()

' データシートを変数に保存

Dim DataSheet As Worksheet

Set DataSheet = ActiveSheet

' データの並び替え (今回はK列、B列の昇順でソート)

Columns("A:K").Sort Key1:=Range("K1"), Order1:=xlAscending, _

Key2:=Range("B1"), Order2:=xlAscending

' 変数の初期化

Dim rowNum, eachRowNum, sheetNum As Integer

rowNum = 1 ' 対象とするデータシートの行番号

eachRowNum = 1 ' コピー先の各シートの行番号

sheetNum = 2 ' コピー先のシートのインデックス

' コピー処理

' K列の値がブランク("")でない間、処理を実行

While Cells(rowNum, 11).Value <> ""

' K列のある行の値が次の行の値と等しい場合の処理

While Cells(rowNum, 11).Value = Cells(rowNum + 1, 11).Value

' コピー先となるシートが存在しない場合、シートを追加

If sheetNum > Worksheets.Count Then

Worksheets.Add after:=Worksheets(Worksheets.Count)

DataSheet.Activate ' データシートをアクティヴにする

End If

' コピー先のシートの行にデータシートの行の値を代入

Worksheets(sheetNum).Rows(eachRowNum).Value = Rows(rowNum).Value

rowNum = rowNum + 1 ' データシートの対象行を移動

eachRowNum = eachRowNum + 1 ' コピー先シートの対象行を移動

Wend

' K列のある行の値が次の行の値と等しくない場合の処理

' (K列の値が1つしかない場合などの処理)

' コピー先となるシートが存在しない場合、シートを追加

If sheetNum > Worksheets.Count Then

Worksheets.Add after:=Worksheets(Worksheets.Count)

DataSheet.Activate

End If

' コピー先のシートの行にデータシートの行の値を代入

Worksheets(sheetNum).Rows(eachRowNum).Value = Rows(rowNum).Value

eachRowNum = 1 ' データシートの対象行を初期化 (新しいシートでは1行目を対象行とする)

rowNum = rowNum + 1 ' コピー先シートの対象行を移動

sheetNum = sheetNum + 1 ' コピー先のシートのインデックスを増加

Wend

End Sub

id:taroemon

いつもご回答ありがとうございます。

本当に助かっています。またよろしくお願いします。

2006/09/19 15:48:22
id:arhbwastrh No.2

arhbwastrh回答回数447ベストアンサー獲得回数232006/09/19 15:37:24

ポイント10pt

Cells(rowNum, 1)の1を全て11に置き換えればOKです。(アルファベットでKは11番目ですよね?)


シートについてですが、とりあえず1000枚以上追加してもなんら不具合はでないので、あまり気にする必要は無いかと思います。

下のサイトによると作成できるシートの上限枚数はPCのメモリなどによって変化しますとのことです。

http://www.relief.jp/itnote/archives/000033.php

  • id:Mook
    Cell の記述方法は
       Cells(rowNum,11)
    でもよいですが、そのまま
       Cells(rowNum, "K")
    というようにもかけます。

    Range と 行と列が逆なので紛らわしいですが、後者のように書いておけば、後から見たときに混乱がないので、お勧めです。
  • id:taroemon
    回答者2の方へ。

    ご回答ありがとうございます。一応あけてありますが、締切手続き中の投稿だったのか、気づきませんでした。
    お返事できませんでしたので、こちらでお礼させていただきます。
  • id:taroemon
    Mook さん貴重なアドバイスありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません