遅刻の「言い訳」選手権

エクセルVBAの初心者です。例えば『A列』の1行目のセルに10、2行目のセルに20、3行目のセルに30という様に新規で数値を入力した後にマクロを実行するとその値をコピーしその行の右方向の列で最初の空白セルにその値を貼り付けたいのですが、どのようにプログラムを組めば良いのか分かりません。詳しい方、お手数をお掛けしますが教えて下さい。

A列 B列 C列 D列 E列 F列
10 15 30 ★
20 25 55 60 80 ★
30 30 40 20 ★
40 10 20 50 40 ★
50 20 30 ★

★印の空白セルにその行のA列の数値が貼り付けられる様にお願いします。
尚、行数は5000行程あります。

質問者からの補足コメント

  • 申し訳ありません。説明が不十分でした。
    簡単に説明しすぎていました。

    ①新規登録の数値は『A列』ではなく、『C5』~『C2000』に入力しています。
    ②『C5』~『C2000』の内、数値の入力が無いセルもあります。
    ③『C5』~『C2000』の数値を『その行のB列』から右方向の最初の空白セルにその値を貼り付けるではなく、『その行のI列~S列』間の最初の空白セルにその値を貼り付けるです。
    ④『その行のI列~S列』のセルに空白セルが無い時は貼り付けない。

    以上、お手数をお掛けして誠に申し訳ありませんが宜しくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/11/05 11:13

A 回答 (4件)

No2です。



効率は悪いけれど、単純な記述でよければ・・

Sub Sample2()
Dim rw As Long, c As Range
For rw = 5 To 2000
For Each c In Cells(rw, 9).Resize(, 11)
 If c.Value = "" Then c.Value = Cells(rw, 3).Value: Exit For
Next c
Next rw
End Sub

処理効率を上げる方法は、ご自身で考えてみてください。
    • good
    • 1
この回答へのお礼

fujillin様
この度は色々と親切に教えて頂き誠にありがとうございました。
教えて頂いた方法でやりたい事が出来ました。
助かりました。お手数をお掛けしました。

お礼日時:2022/11/05 15:39

>行数は5000行程あります。


>①新規登録の数値は『A列』ではなく、『C5』~『C2000』に入力しています。

行数が5000行ほどあるなら、
『C5』~『C2000』ではなくm『C5』~『C5000』
になりませんか。
どちらが正しいのでしょうか。
    • good
    • 0

No1です。



ご質問文の内容と補足の内容は全く異なるものです。

とは言え、大雑把な考え方はNo1に示したような方法でできると思いますので、補足にご提示の①~④の条件をそのまま記述すればできると思います。

論理的に考えることはできているようですので、後はそれをコード化するだけです。
「マクロの記録」やMSDNのドキュメントを利用して、頑張ってみてください。
https://learn.microsoft.com/ja-jp/office/vba/api …
    • good
    • 0

こんにちは



一例です。

Sub Sample()
Dim c As Range

For Each c In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
 If c.Value <> "" Then
  If c.Offset(, 1).Value = "" Then
   c.Offset(, 1).Value = c.Value
  Else
   c.End(xlToRight).Offset(, 1).Value = c.Value
  End If
 End If
Next c
End Sub
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報