前提・実現したいこと
まず最終的にやりたいことですが
複数Sheetに渡ってある同形式の表から必要箇所(セルデータ)をもってきて
それを1つのSheetに縦方向に結合した表を作成することです。
上で説明した必要データを持ってきて縦に結合という処理は
既にできているのですが、その処理の中で想定通りに動かない
(処理を書いてないので当たり前ですが)
部分があるのでそこの記述の仕方を教えて頂きたく思います。
以下の2つの画像(1枚目が処理前、2枚目が処理後)を使って説明します。
尚、色付きセルは必要データでbefore1それぞれの色はafterに対応しています。
▼処理前Sheet(複数あるうちの1Sheet(before1))
▼処理後Sheet(after)
ここで、処理前Sheetの26、27行目と処理後Sheetの9、10行目を見て頂きたいのですが
個々の部品は親部品2つに対して子部品が2つあります。
しかし画像だと、子部品が次の列に移らず同じデータを取ってきています。
これを子部品と同じ数だけ親部品も下にコピーしたいのです。
これまた分かりにくい説明だと思うので画像も確認お願いします。
説明が下手すぎて伝わっていない部分もあるはずなので
補足をしながら解決できたらと思います。
ご協力よろしくお願いします。
該当のソースコード
VBA
1 2Sub シート別データ結合テスト() 3 4Dim sht0 As Worksheet, sht1 As Worksheet 5Dim i As Long 6Dim j As Long 7Dim Frm As Long 8Dim C_Column As String 9Dim D_Column As Long 10Dim N_Column As String 11Dim P_Column As String 12Dim Q_Column As String 13Dim S_Column As Double 14 15j = 5 16 17'''''''''''''''''' メイン処理 '''''''''''''''''' 18 19Set sht1 = Sheets("after") 20 21 For Each sht0 In ThisWorkbook.Sheets 22 23 If sht0.Name <> sht1.Name Then 24 For i = 8 To 60 Step 2 25 If (sht0.Cells(i, 14).Value) = "" Then 26 '何もしない 27 Else 28 If sht0.Cells(i, 3).Value = "" Then 29 '何もしない 30 Else 31 C_Column = sht0.Cells(i, 3).Value 32 D_Column = sht0.Cells(i, 4).Value 33 N_Column = sht0.Cells(i, 14).Value 34 P_Column = sht0.Cells(i, 16).Value 35 Q_Column = sht0.Cells(i, 17).Value 36 S_Column = sht0.Cells(i + 1, 19).Value 37 End If 38 sht1.Cells(j, 1) = C_Column 39 sht1.Cells(j, 2) = D_Column 40 sht1.Cells(j, 3) = N_Column 41 sht1.Cells(j, 4) = P_Column 42 sht1.Cells(j, 5) = Q_Column 43 sht1.Cells(j, 6) = S_Column 44 sht1.Cells(j, 7) = sht0.Name 45 sht1.Cells(j, 8) = i 46 j = j + 1 47 End If 48 Next 49 End If 50 Next sht0 51 52'''''''''''''''''' フォーマット設定 '''''''''''''''''' 53 54 For Frm = 1 To 1000 55 56 With Cells(Frm, 2) 57 .NumberFormatLocal = "@" 58 .Value = Format(.Value, "000") 59 End With 60 61 With Cells(Frm, 4) 62 .NumberFormatLocal = "@" 63 .Value = Format(.Value, "000") 64 End With 65 66 With Cells(Frm, 6) 67 .NumberFormatLocal = "@" 68 .Value = Format(.Value, "##0.0000") 69 End With 70 71 Next Frm 72End Sub
すみません。もう少し簡潔に書かせていただきます。
ソースでは、まずN列のセルが空文字でないか判定し
空文字でないつまりデータがあれば次の処理に移り
C列が空文字かどうかを判定しています。
そして、それもFalseなら初めて処理が実行されるようになっています。
今回やりたいのは、この処理に加えて
上の表のC列が空文字なら空白行分、一番最初の空文字セルの2つ上の値と
同じものを空文字でなくなるまで値を移し、子部品はこの表であれば
4部品分データを取得して値を移したいと思っています。
この画像が処理後実現したい表になります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/14 07:08