行×列の組み合わせで値を列挙する方法は以前解決したのですが、
また難問にぶつかりました。
添付画像のような表を同様に列挙したいのですが、行×列1,列2,列3,列4みたいな組み合わせで書き出したいのです
※見やすくするために空行を入れてますが実際には詰めてます。
固定値の個所は"固定値"としてすべて同じ文字を入れたいだけです。下記の横方向には違うテキスト。縦方向には同一テキストです。
固定値,A1,固定値,固定値,固定値,B1項目名,B1,B2,B3,B4
固定値,A1,固定値,固定値,固定値,C1項目名,C1,C2,C3,C4
固定値,A1,固定値,固定値,固定値,D1項目名,D1,D2,D3,D4
固定値,A1,固定値,固定値,固定値,E1項目名,E1,E2,E3,E4
固定値,A1,固定値,固定値,固定値,F1項目名,F1,F2,F3,F4
固定値,A1,固定値,固定値,固定値,G1項目名,G1,G2,G3,G4
固定値,A1,固定値,固定値,固定値,H1項目名,H1,H2,H3,H4
固定値,A1,固定値,固定値,固定値,I1項目名,I1,I2,I3,I4
固定値,A1,固定値,固定値,固定値,J1項目名,J1,J2,J3,J4
固定値,A1,固定値,固定値,固定値,K1項目名,K1,K2,J4,K4
固定値,A1,固定値,固定値,固定値,L1項目名,L1,L2,L4,L4
固定値,A2,固定値,固定値,固定値,B1項目名,B1,B2,B3,B4
固定値,A2,固定値,固定値,固定値,C1項目名,C1,C2,C3,C4
固定値,A2,固定値,固定値,固定値,D1項目名,D1,D2,D3,D4
固定値,A2,固定値,固定値,固定値,E1項目名,E1,E2,E3,E4
固定値,A2,固定値,固定値,固定値,F1項目名,F1,F2,F3,F4
固定値,A2,固定値,固定値,固定値,G1項目名,G1,G2,G3,G4
固定値,A2,固定値,固定値,固定値,H1項目名,H1,H2,H3,H4
固定値,A2,固定値,固定値,固定値,I1項目名,I1,I2,I3,I4
固定値,A2,固定値,固定値,固定値,J1項目名,J1,J2,J3,J4
固定値,A2,固定値,固定値,固定値,K1項目名,K1,K2,K3,K4
固定値,A2,固定値,固定値,固定値,L1項目名,L1,L2,L3,L4
・
・
・
A24まで、またはA**の値が例えば「最終行」の行が最終行となります。
この様な場合、どんな処理の繰り返しになるんでしょう?
No.8ベストアンサー
- 回答日時:
No6です。
以下のようにしてください。
Public Sub 列挙()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim col1 As Long
Dim maxrow As Long
Dim grp_no As Long 'グループ番号(1~4)
Dim seq_no As Long 'B列~L列の番号(1~11)
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'sheetの最大行取得
'4行目以降をクリア
sh2.Rows("4:" & Rows.Count).Clear
row2 = 4
For row1 = 4 To maxrow
For seq_no = 1 To 11
sh2.Cells(row2, 1).Value = "固定値1"
sh2.Cells(row2, 2).Value = sh1.Cells(row1, "A").Value
sh2.Cells(row2, 3).Value = "固定値2"
sh2.Cells(row2, 4).Value = "固定値3"
sh2.Cells(row2, 5).Value = "固定値4"
sh2.Cells(row2, 6).Value = sh1.Cells(3, 5 + seq_no).Value
sh2.Cells(row2, 7).Value = sh1.Cells(row1, 5 + 0 * 11 + seq_no).Value
sh2.Cells(row2, 8).Value = "固定値5"
sh2.Cells(row2, 9).Value = sh1.Cells(row1, 5 + 1 * 11 + seq_no).Value
sh2.Cells(row2, 10).Value = "固定値6"
sh2.Cells(row2, 11).Value = sh1.Cells(row1, 5 + 2 * 11 + seq_no).Value
sh2.Cells(row2, 12).Value = sh1.Cells(row1, 5 + 3 * 11 + seq_no).Value
row2 = row2 + 1
Next
Next
End Sub
すごいです。期待通りに変更されました。
つまりFor文で一気に出力してたのを止めて、
1行ずつ書き出しに変更したという事でしょうか?
列番号を出すための数式が理解できませんでした(涙
「*11」してる理由とか。。。
自分で書けるようになりたいのですが、、
ありがとうございました!
No.12
- 回答日時:
こんな感じでしょうか?
Sub megu()
Dim r1 As Range
Dim r As Range, rr, rs
Dim r2 As Range, v, vv, i As Long
Application.ScreenUpdating = False
Set r2 = Worksheets("Sheet2").Range("A4") ' 書き出すシートと開始セル番地
r2.Parent.Range(r2, r2.Parent.Cells(Rows.CountLarge, Columns.CountLarge)).ClearContents
v = Array( _
"固定値", _
"A1", _
"固定値", _
"固定値", _
"固定値", _
"B1項目名", _
0, _
"固定値", _
0, _
"固定値", _
0, _
0 _
)
vv = Array(6, 8, 10, 11)
rs = Array("F1", "Q1", "AB1", "AM1")
With Worksheets("Sheet1")
Set r1 = .Range("A4", .Cells(Rows.CountLarge, "A").End(xlUp)) ' 元データのシートとセル範囲
For Each r In r1
r2.Resize(11, 12).Value = v
r2.Offset(, 1).Resize(11).Value = r.Value
.Cells(3, "F").Resize(, 11).Copy
r2.Offset(, 5).PasteSpecial Paste:=xlPasteValues, Transpose:=True
i = 0
For Each rr In rs
r.Range(rr).Resize(, 11).Copy
r2.Offset(, vv(i)).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
i = i + 1
Next
Set r2 = r2.Offset(11)
Next
End With
Application.ScreenUpdating = True
Set r1 = Nothing
Set r2 = Nothing
End Sub
No.11
- 回答日時:
そう言えば質問文(データの書き出し)を改めてみて配列は不要な感じがしました。
と言うより1行ずつ書き出す意味はなく、まずA1に対して11行書き出したいデータを範囲で代入させてしまい、変動する部分には仮に "" でも入れておく。
あとは項目・グループ毎に『行列入れ替え』で代入させたい所に放り込んでいけばA1の表は完成するのかなと。
あとは~A最終行まで繰り返していけば良かったのかもですね。
ジジィなので『行列入れ替え』に気づくのが遅くなるなんてボケてますよね。
No.9
- 回答日時:
No.7です。
補足もありませんでしたしベテラン様が解決されたようなので、配列による手法は必要なさそうですね。(まだ作ってませんし)
無事な解決おめでとうございます。
せっかくアイデアを出して頂いたのに返事が追い付かず申し訳ありませんでした。
配列による手法というのも気になります。。。
ありがとうございました。
No.7
- 回答日時:
取り敢えず、
>A24まで、またはA**の値が例えば「最終行」の行が最終行となります。
A列の最後の値が『最終行』であった場合、その行は作業があるのですか?
それともB列以降はデータはないから1つ上の行で終わりなのでしょうか?
または『A21』まで記載があってA21と書かれた行までなのでしょうか?
ベテラン様の回答も出てますしExcelないので気になった点だけで。
⇒マルチブートですが全てにOfficeを入れてないもので。
完成を急いでおり、なかなかお返事できず申し訳ありません。
元の表には全ての列全ての行にデータが入っている想定ですので、
A列最終行の行に対しても作業があります。
ありがとうございました。
No.6
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Sheet1が元データ、Sheet2が出力先のシート名になっています。
シート名はあなたの環境にあわせて適切に設定してください。
Option Explicit
Public Sub 列挙()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim col1 As Long
Dim maxrow As Long
Dim grp_no As Long 'グループ番号(1~4)
Dim seq_no As Long 'B列~L列の番号(1~11)
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'sheetの最大行取得
'4行目以降をクリア
sh2.Rows("4:" & Rows.Count).Clear
row2 = 4
For row1 = 4 To maxrow
For seq_no = 1 To 11
sh2.Cells(row2, 1).Value = "固定値1"
sh2.Cells(row2, 2).Value = sh1.Cells(row1, "A").Value
sh2.Cells(row2, 3).Value = "固定値2"
sh2.Cells(row2, 4).Value = "固定値3"
sh2.Cells(row2, 5).Value = "固定値4"
sh2.Cells(row2, 6).Value = sh1.Cells(3, 5 + seq_no).Value
For grp_no = 1 To 4
sh2.Cells(row2, 6 + grp_no).Value = sh1.Cells(row1, 5 + (grp_no - 1) * 11 + seq_no).Value
Next
row2 = row2 + 1
Next
Next
End Sub
ありがとうございます。
意図通り完璧でした。(実際のフォーマットとサンプルのずれは、ソース内の値をカスタマイズして調整できました)
大変申し訳ないのですが、少し修正があり、
値1グループと値2グループの間に固定値1列、
値2グループと値3グループの間に固定値1列を挟むように変えられないでしょうか?
つまり、元の表現の仕方で表すとこのようになります。
固定値,A1,固定値,固定値,固定値,B1項目名,B1,B2,B3,B4
↓↓↓
固定値,A1,固定値,固定値,固定値,B1項目名,B1,固定値,B2,固定値,B3,B4
以下のソース部分を修正すれば良いとは思うのですが、うまくいきません。。。
For grp_no = 1 To 4
sh2.Cells(row2, 6 + grp_no).Value = sh1.Cells(row1, 5 + (grp_no - 1) * 11 + seq_no).Value
すみません、よろしくお願いいたします。
No.4
- 回答日時:
①添付の画像がよく見えないので、下記にアップしました。
下記であってますか。最後の列はAWになります。
あなたが提示した画像ではAQになっています。
どちらが正しいでしょうか。
https://gyazo.com/ddac14ed985cb8ff7525eebf06140bda
②上記内容をもとにした出力結果は下記URLであってますか。
4行目から出力しますが、よろしいでしょうか。
https://gyazo.com/086741f36aacb786b77fe6a7b1c28b75
>①
ありがとうございます。
ご指摘の通りです。最初に私が載せた画像は、値グループ3が6列抜けてました。(B~Gが抜けてる)だからAQ列が最後になってます。
tatsumaru77さんのAWが最終列で正解です。
大変失礼いたしました。
>②
拝見しました。全くその通りです。
自分の力ではノーアイデアで、、、
大変負担のかかる事ではないかと恐縮してますが、
もし実現したらすごく嬉しいです。
No.3
- 回答日時:
でも画像とテキストの関係性が良くわかりません。
>1行につきB~L、B~L、B~L、B~Lと4回出てきます。
これはどこを指していて何をどうすればいいのか画像との整合性を表した方が良いかなって感じますよ。
⇒画像ファイルで言うなら知恵袋の方が見やすいかもですけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
EXCEL vbaでシート上に配置した...
-
VBA 別ブックからコピペしたい...
-
VBA 別ブックから条件に合うも...
-
エクセルのマクロについて教え...
-
vba 別ブックに転記
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロについて教え...
-
エクセルのマクロついて教えて...
-
VB.net(VB)で、フォームにExcel...
-
エクセルのマクロについて教え...
-
配列のペースト出力結果の書式...
-
エクセルのマクロについて教え...
-
マクロの記録を使用したマクロ...
-
ExcelのVBAコードについて教え...
-
Outlookの「受信日時」「件名」...
-
VBA実行後に元のセルに戻りたい
-
IF文、条件分岐の整理方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
”固定”の反意語
-
指数表記の逆は?
-
WordPressの編集方法 - Lightni...
-
土壁に穴を空けて てすりをつけ...
-
webデザインでページめくりアニメ
-
office excelで ウィンドウ枠の...
-
ページ内検索バーを固定したい。
-
【Excel VBA】行×列1,列2,列3,...
-
右クリックでポップアップメニ...
-
jimdoホームページ作成 全部の...
-
パワーポイントで総ページ数を表示
-
wordpressの固定ページのタイト...
-
WordPressの固定ページを複製す...
-
HTML CSSについて 初心者です。...
-
Pukiwikiを用いたサイト例
-
フッターを固定して、常にどの...
-
WordPressについてご質問させて...
-
広報紙を印刷する時のページ数...
-
Excel2007での行、列の同時固定...
-
フレームを使わず、上を固定?
おすすめ情報
添付画像を細かく見ると誤解される箇所がありましたが、
画像も小さくて見づらいので、テキストで訂正します。
列の項目名は、
1行につきB~L、B~L、B~L、B~Lと4回出てきます。
こんな繰り返しの並び替えです。
A1,B1,B1,B2,B3,B4
~
A1,L1,L1,L2,L4,L4
A2,B1,B1,B2,B3,B4
~
A2,L1,L1,L2,L3,L4
~
A24,B1,B1,B2,B3,B4
~
A24,L1,L1,L2,L3,L4
分かりづらくてすみません。おかしい点があれば補足します。
失礼しました。
以前解決したという方法はこちらです。
https://oshiete.goo.ne.jp/qa/12431789.html
行×列がシンプルになるパターンでした。
端までキャプチャーすると画像が縮小されて見づらくなるので、
値グループ2まで見せてます。
値グループ1~値グループ4まであります。
1行目は最初はBの黄色部分を並べて
2行目は、C部分を並べて、
D~Lまでの繰り返しです。
次1行下がって、A2から始まる、の繰り返しです。
説明分かりづらくてすみません。