プロが教える店舗&オフィスのセキュリティ対策術

ある列に並んでいるデータを行列変換して別ワークシートに貼り付け作業の繰り返しVBA
OfficeのExcel2007、OS:Windows Vista 多分旧バージョンでも問題ないと思われる。
VBAマクロについて勉強したての状況です。
内容としては ある列に 数値データが8,000件(時により不定期)ほど並んでいるデータを例えば20件を一組として選択して コピーし、行列変換して 別Worksheetの任意のセルを選択して張り付ける。
そして 次のデータ(21列目以下)を20件選択して 行列変換して 貼り付け個所は一行下のセルを選択して張り付ける。これを数値データ列に"null"値が発生するまで 順次繰り返す。

下記は、私が 断片的にに考えているVBAで これらを元に完璧な構文のプログラムを作成すればいいのではと思われますが、私の能力の限界で現時点では後が続きません。

Worksheets.add After:=Worksheets("編集")'"編集"Worksheetを追加

Worksheets("data1").Range(Cells(6,6),(25,6)).Copy
'"data1"WorksheetのデータがセルF6から下にずらっと並んでいる。そこから縦20セル分をコピー
Worksheets("編集1").Range(Cells(1,3)).PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, SkipBlanks:= False, Transpose:=True
'行列変換して "編集"Worksheetの"C1"セルを選択して貼り付け

Do While Worksheets("data1").ActiveCell.Value = ""
'F列のセルデータが空白になるまで

Cells(Worksheets("編集").Rows.Count, 1).End(xlUp).Offset(1).Select
'前回の貼り付け場所の下の新規に貼り付ける場所に移動

これら以外に他に複数の変数を定義して 繰り返しループになるようにすればいいと思われますが・・

今のところ基礎編のプログラミングの本を複数回読んでいるが理解できていない状況です。
以上、舌足らずがあると思われますが御教唆のほどよろしくお願いいたします。

A 回答 (3件)

できるだけ質問者様のコードを活かすなら、こんな感じでしょうか。



Worksheets.Add After:=Worksheets(Worksheets.Count) '"編集"Worksheetを追加
Worksheets(Worksheets.Count).Name = "編集"
Dim r1 As Long, r2 As Long
r1 = 6
r2 = 1

Do While Worksheets("data1").Cells(r1, 6).Value <> ""
'F列のセルデータが空白になるまで
With Worksheets("data1")
.Range(.Cells(r1, 6), .Cells(r1 + 19, 6)).Copy
End With
'"data1"WorksheetのデータがセルF6から下にずらっと並んでいる。そこから縦20セル分をコピー
Worksheets("編集").Cells(r2, 3).PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'行列変換して "編集"Worksheetの"C1"セルを選択して貼り付け

r1 = r1 + 20
r2 = r2 + 1
Loop
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
希望のVBAができました。これからもVBAの勉強にまい進したいと思います。ありがとうございました。

お礼日時:2010/07/05 14:32

(1)マクロの記録を使う


形式を選択して貼り付け
行(と)列を入れ替える
を20行について行う。
セルを21-40行に変化させて、貼り付ける始点をずらす。
この繰り返し。
マクロの記録のセル範囲をどう変数化するか、が勉強課題。
(2)セルの代入を繰り返すロジックでやる方法
ForNextでStepを20にして
20行のデータを1行にするため、セルの列をずらして代入していく。
ーー
(1)がVBAらしい方法だと思う。
しかし(2)を知っておくとつぶしが利く。
しかしこのコツを身に着けるには、相当数のVBAの問題の経験が要るようだ。
ーーー
Sub test01()
d = 200 '200行の例 別途最終行を捉えるコードは勉強すること
k = 2 '結果は2行目から
For i = 1 To d Step 20 '20行で区切る
For j = 3 To 20 + 2 'C列から結果を20列出す
Cells(k, j) = Cells(i + j - 3, "A")
Next j
k = k + 1 '20セル代入すると1行下のセルにだす
Next i
End Sub
ーーー
別シートに出す場合はどうするか勉強のこと。
Googleの検索を活用のこと
例 「VBA 最終行 取得」
「VBA 他シート 代入」
    • good
    • 0
この回答へのお礼

VBA勉強中の状態で恐縮しております。今後のVBA勉強するにあたって 大変為になりました。
誠にありがとうございました。
未熟な状態で各種理解するのに時間がかかり、お礼が遅れましたこと失礼しました。

お礼日時:2010/07/05 14:37

何がどう繰り返しか、


変数で動かすものを列挙して整理して下さい。


1回分は問題ないとして

全く最初の先頭のセル位置A=6


今回セル範囲上=A
今回セル範囲下=A+20‐1
次回セル範囲上=A+20次回セル範囲下=A+20‐1

A=6から8000まで20ずつ増が基本のロジックになりそうで、これをFOR文にして使います。
    • good
    • 0
この回答へのお礼

舌足らずの質問で大変失礼しました。
初回での質問で困った挙句の思いあまっての質問でした。
次回以降は、もう少し時間をとって整理した上で質問事を考えたいと思います。
その時はまたよろしくお願いいたします。

お礼日時:2010/07/05 14:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!