
行×列の組み合わせで値を列挙する方法は以前解決したのですが、
また難問にぶつかりました。
添付画像のような表を同様に列挙したいのですが、行×列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で質問しましょう!
似たような質問が見つかりました
- その他(税金) 国民健康保険料の計算がサイトによってかなり違うのですが、何故でしょうか? 4 2022/03/24 14:51
- Excel(エクセル) エクセルで 1行目の固定とE列までの固定ができますか? 7 2022/10/21 04:56
- 家賃・住宅ローン 【住宅ローンの固定金利と変動金利で日銀の植田新総裁は固定金利も変動金利も両方操作すると 2 2023/04/17 19:11
- 労働相談 支給されないみなし残業手当について 4 2022/07/01 14:18
- 家賃・住宅ローン 【銀行から固定金利の住宅ローンを組んだ人に質問です】 銀行側から固定金利には固定期間 3 2023/04/18 07:52
- 簿記検定・漢字検定・秘書検定 簿記2級 固定資産の除却と廃棄 固定資産の除却と廃棄を勉強しました。 もし仮に、 「固定資産除却しよ 2 2022/09/13 14:47
- 数学 (3)がわかりません。 (1)は固有値λ=±1 固有ベクトルは λ=1のとき (-i,1) λ=-1 2 2023/06/11 14:46
- 数学 全微分について質問です。 z=f(x,y)のとき df=(∂f/∂x)dx+(∂f/∂y)dy ∂f 5 2023/02/24 05:46
- 固定資産税・不動産取得税 【固定資産税について質問です】ブログで固定資産税を初めて支払っている人がいて「一条工務店で家を建てた 2 2022/04/24 22:15
- FTTH・光回線 固定回線について教えてください。 固定回線=光回線だと思うのですが(間違ってますかね?) 家のネット 6 2022/03/25 09:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
【ExcelVBA】5万行以上のデー...
-
Vba FileSystemObject オブジェ...
-
VBA 入力箇所指定方法
-
【ExcelVBA】値を変更しながら...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel(M365) Vlookup/セル反転(...
-
【ExcelVBA】値を変更しながら...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
”固定”の反意語
-
WordPressの固定ページを複製す...
-
指数表記の逆は?
-
WordPressの編集方法 - Lightni...
-
右クリックでポップアップメニ...
-
エクセルの、一番上の行に入力...
-
gooの簡単HPにレンタル掲示板や...
-
フォートナイトゲーミングpcでf...
-
アクセス解析に関して教えてく...
-
ExcelVBA ウィンドウ枠の固定で...
-
【Excel VBA】行×列1,列2,列3,...
-
制作したウェブサイトを友人が...
-
Pukiwikiを用いたサイト例
-
ページ内検索バーを固定したい。
-
wordpressの固定ページのタイト...
-
ワードプレスの固定ページでタ...
-
HTML CSSについて 初心者です。...
-
教えてください
-
jimdoホームページ作成 全部の...
-
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から始まる、の繰り返しです。
説明分かりづらくてすみません。