- ベストアンサー
exlel 繰り返し マクロ VBA
エクセルのシートで A B 1空白 100 2空白 A 3空白 B 4空白 C 5空白 空白 6空白 空白 7空白 200 8空白 A 9空白 B 10空白 空白 11空白 300 12空白 A 13空白 B 14空白 C 15空白 D 16空白 空白 上記のデータを下記の様に空白行をはさんだ不特定行のB列の各行のはじめのセルの値をA列に書き込んでいくマクロをお教えください。 A B 1100 100 2100 A 3100 B 4100 C 5100 D 6空白 空白 7200 200 8200 A 9200 B 10空白 空白 11300 300 12300 A 13300 B 14300 C 15300 D 16空白 空白 お願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub try() Dim r As Range For Each r In Range("B:B").SpecialCells(xlCellTypeConstants, 3).Areas r.Offset(, -1).Value = r.Item(1).Value Next End Sub 空白行も詰めた方がよいのかな?
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート1にデータがあるとして別のシートに表示させるのでしたらマクロでなくともよいのではないでしょうか? 別のシートの1行目は空の行として、A2セルには次の式を入力します。 =IF(ISNUMBER(Sheet1!B1),Sheet1!B1,IF(Sheet1!B1="","",A1)) B2セルには次の式を入力します。 =IF(Sheet1!B1="","",Sheet1!B1) 最後にA2セルとB2セルを選択してから下方にオートフィルドラッグします。
- imogasi
- ベストアンサー率27% (4737/17070)
判りにくい質問表現だが、結果例があるので何とか判る。 文章でロジックを文章で表現できる力を磨けば良い。 この場合行単位のデータの処理の時系列的観点を追って考える。 ほとんどの場合(初歩的な課題の場合、本件もそう)上行から下へ1行ずつ、考える(For Next)で解決できる。 今処理している行より前の行のデータ状態の影響を受けるので、変数で、あとの行の処理のときのため、どう状態を受け渡すかが課題。 Flag処理的処理である。 ーー 結果シートのA列にセットすべき値を保持する変数を1つXを設ける。 ーー 最初はデータ開始行のB列をXへ 各行を全て1つづつ処理するが B列で空白行が現れるまでは、 x-B列の値 の対を別シートにセット B列が空白があれば読み飛ばし。 ただし最初の行は空白行として書き出し。 B列で空白以外が出現したらxにB列の値をセットして、 X-B列を別シートにセット。 以上の繰り返し。 ーーー 丸投げ質問にコードを書きたくないが 例データ A1:B20 (ただしA列は空白) A列 B列 100 A B C 200 A B 300 A B C D 400 x ーーーー Sub test05() Dim sh1, sh2 Set sh1 = Worksheets("Sheet2") Set sh2 = Worksheets("Sheet3") d = sh1.Range("B65536").End(xlUp).Row MsgBox d k = 2 x = sh1.Cells(1, "B") sh2.Cells(k, "A") = x sh2.Cells(k, "B") = x k = k + 1 For i = 2 To d If sh1.Cells(i, "B") = "" Then If sh2.Cells(k - 1, "B") <> "" Then x = "" '*1 sh2.Cells(k, "A") = "" sh2.Cells(k, "B") = "" k = k + 1 End If Else If x = "" Then '*2 x = sh1.Cells(i, "B") Else sh2.Cells(k, "A") = x sh2.Cells(k, "B") = x k = k + 1 End If End If Next i End Sub ーーー 結果 A1:B15 100 100 100 100 100 100 100 100 200 200 200 200 300 300 300 300 300 300 300 300 400 400
- kybo
- ベストアンサー率53% (349/647)
Sub macro() Dim C As Range Dim I As Integer ’B1からB列の最終行までループ For Each C In Range("B1", Range("B" & Rows.Count).End(xlUp)) '数字なら If IsNumeric(C.Value) Then ’数字を変数に格納 I = C.Value End If ’空白でないなら If C.Value <> "" Then ’A列に変数の数字を入力 C.Offset(, -1).Value = I End If Next C End Sub