ある列に並んでいるデータを行列変換して別ワークシートに貼り付け作業の繰り返し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
'前回の貼り付け場所の下の新規に貼り付ける場所に移動
これら以外に他に複数の変数を定義して 繰り返しループになるようにすればいいと思われますが・・
今のところ基礎編のプログラミングの本を複数回読んでいるが理解できていない状況です。
以上、舌足らずがあると思われますが御教唆のほどよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
できるだけ質問者様のコードを活かすなら、こんな感じでしょうか。
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
ご回答ありがとうございます。
希望のVBAができました。これからもVBAの勉強にまい進したいと思います。ありがとうございました。
No.3
- 回答日時:
(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 他シート 代入」
VBA勉強中の状態で恐縮しております。今後のVBA勉強するにあたって 大変為になりました。
誠にありがとうございました。
未熟な状態で各種理解するのに時間がかかり、お礼が遅れましたこと失礼しました。
No.1
- 回答日時:
何がどう繰り返しか、
変数で動かすものを列挙して整理して下さい。
1回分は問題ないとして
全く最初の先頭のセル位置A=6
今回セル範囲上=A
今回セル範囲下=A+20‐1
次回セル範囲上=A+20次回セル範囲下=A+20‐1
A=6から8000まで20ずつ増が基本のロジックになりそうで、これをFOR文にして使います。
舌足らずの質問で大変失礼しました。
初回での質問で困った挙句の思いあまっての質問でした。
次回以降は、もう少し時間をとって整理した上で質問事を考えたいと思います。
その時はまたよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同一セルに日時があるものを日...
-
EXCELでCSVファイル保存すると...
-
COUNTIFの反対の関数はあるので...
-
1年分のデータから特定の月分...
-
Excelで指定した条件と一致する...
-
エクセルでセルを一括で右詰に...
-
エクセルVBAで、複数セルのデー...
-
【VBA】指定フォルダに格納中の...
-
エクセルVBA オートフィルの最...
-
エクセル数式・等間隔ごとの範...
-
エクセルで数列を使う方法はあ...
-
EXCELで年月日の表記から日付部...
-
webクエリのurlの変更方法
-
エクセルで特定の行を除いて計...
-
1つのセルにまとまっている情報...
-
エクセルで数字、文字列混在の...
-
ドロップダウンリストで空白の...
-
Excelなのですが A1~A3・・...
-
エクセルの主軸と第2軸の0を合...
-
エクセルで円グラフに引き出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一セルに日時があるものを日...
-
1年分のデータから特定の月分...
-
EXCELでCSVファイル保存すると...
-
Excelで指定した条件と一致する...
-
COUNTIFの反対の関数はあるので...
-
ドロップダウンリストで空白の...
-
1つのセルにまとまっている情報...
-
エクセルVBAで、複数セルのデー...
-
エクセルで数字、文字列混在の...
-
エクセルでセルを一括で右詰に...
-
OFFSET関数を使用した印刷範囲...
-
EXCELで年月日の表記から日付部...
-
EXCELで足し算できるのにSUM...
-
【VBA】指定フォルダに格納中の...
-
Excelで連続データを行飛ばしで...
-
複数のシートの日付データを、...
-
webクエリのurlの変更方法
-
excelで平均差を出したい
-
エクセルで特定の行を除いて計...
-
Excel 空白セルの掛け算で答え...
おすすめ情報