Excelのマクロ初心者です。
以下のような表がある時に(D列の数値ー1)行分を
A列~C列の空白セルに上段の文字をコピーしたい場合のマクロを教えてください。
(説明が下手ですみません…)
A B C D E
1 あ い う 2 お
2 こ
3 さ し す 1 そ
4 た ち つ 3 と
5 の
6 ほ
マクロ実行後はこうなりたいです。
⇓
A B C D E
1 あ い う 2 お
2 あ い う こ
3 さ し す 1 そ
4 た ち つ 3 と
5 た ち つ の
6 た ち つ ほ
よろしくお願い致します。
No.6ベストアンサー
- 回答日時:
#5の回答者です。
こういう場合、だいたい、回答者の一人が、業を煮やして、キメウチで作ってしまうケースが多いようです。しかし、今回も、こちらはコード見送りました。
言葉よりも、画像のほうが情報が速く正しく伝わりますから、一度、そういう説明の仕方も考えたほうがよいでしょうね。今回も画像を付けます。(ツールは、FastStones Capture for Windowを使用)
原則があって、各々の条件を導きだす方法のほうが楽ですね。
>Ð列の数値よりも空白かどうかを最優先する
--空白でなかったらコピーをしない
>D1の数値が4だとしてもその下の段に1段しか空いていなければ1段のみのコピー
--つまり画像の②のような場合は、コピーしない。
ということになります。
◯画像では、行の終わりを取り入れて6行までとしました。
そうすると、余りがあっても、それもコピーしないとなります。
No.5
- 回答日時:
この質疑の流れを読んでいて、
>おっしゃる通り、答えが思っている通りではないものが出てきてしまいました…
もしかしたら、辻褄があわなくなってしまったというか、C列の数字と、貼り付け行との矛盾点が出てきたのではないでしょうか。
たぶん、最初の質問の内容に、抜けている部分があったのではないかと私は読みました。あまりに単純化したために、実務的な内容とは違う部分があるのではないかと思います。
#4さんのご想像通りだとしても、それ自体は、ご質問者さんから明確な不具合を指摘されないと、傍からみていると、二の矢はつげられないと思うのです。
問題になる場合は、どういう状態の時になったのか、それが書かれていないままに、違うコードを書いても無駄になってしまうと思います。
逆順にやってほしいと、リクエストのままに、回答者の皆様がたがコードを書くのはやぶさかではないでしょうけれども、VBAマクロは、論理に従って書かれますから、逆順でどうなるということではなく、どういう問題に対して、逆順で処理するか、ということになるはずです。
その問題がどういう状態なのか教えていただいた上での話で、またD列の数字そのものが、コピーの回数だけの意味なら、逆順で処理する必要はないと思います。(私の考えるコードではという意味ですが。)
例えば、こんな場合、D列の数字を必ず実行させ、空白に埋めていくというなら、このようになります。
ありがとうございます。
質問初心者でごめんなさい。。
補足に書くべきかこちらに書くべきかすら迷いながらで…
うまく説明できるか不安ですが、fujillinさんに教えていただいたマクロを実行するとWindFallerさんが書いていただいた通り、5行目が「あいう」になりました。
しかし、Ð列の数値よりも空白かどうかを最優先にしたいのです。
D1の数値が4だとしてもその下の段に1段しか空いていなければ1段のみのコピーで、次はⅮ3の2に対して考える…というようにしたいのです。
伝え方が下手であればご指摘ください。
No.4
- 回答日時:
こんにちは
ご質問文にあるままにコード化すればよいと思いますが、数値が示す範囲が重複している場合は、処理の手順によって結果に違いが出る可能性がありますね。
とりあえずのサンプルです。
Sub Sample()
Dim rwMax As Long, rw As Long
Dim r As Long, c As Integer
Dim val, rng As Range
rwMax = Cells(Rows.Count, 4).End(xlUp).Row
rw = 1
While rw <= rwMax
val = Cells(rw, 4).Value
If IsNumeric(val) Then
Set rng = Cells(rw, 1)
For r = 1 To Int(val - 1)
For c = 0 To 2
If rng.Offset(r, c) = Empty Then rng.Offset(r, c) = rng.Offset(, c).Value
Next c
Next r
End If
rw = rw + 1
Wend
End Sub
※ 上記サンプルでは1行目から順に処理をしています。
※ D列の値は数値として評価できるものだけを対象にしています。(実数も可。数値でない場合は無視します。)
※ ご質問文に例示のサンプルで、D2に4の数字が入っていた場合を仮定すると、1行目から処理して行く方式だと2行目には「あ、い、う」が入り、その値を参照して、5行目は「あ、い、う」、6行目は「た、ち、つ」となります。
最大行から逆順に処理して行く方式だと、5、6行目は「た、ち、つ」、2行目は「あ、い、う」となるので、処理の順序によって5行目の結果が異なるという可能性があります。
※ このような範囲の重複を事前にチェックすることも可能ですが、サンプルでは行っていません。
ありがとうございます。
おっしゃる通り、答えが思っている通りではないものが出てきてしまいました…
最大行から逆順に処理する方法だと構文が変わってくるのでしょうか?
No.3
- 回答日時:
ずれてしまいました。
B5セルに「に」が入っていた場合は次のどれになりますか?
① A5「 」、B5「に」、C5「 」、A6「 」、B6「 」、C6「 」
② A5「た」、B5「に」、C5「つ」、A6「た」、B6「ち」、C6「つ」
③ A5「 」、B5「に」、C5「 」、A6「た」、B6「ち」、C6「つ」
No.2
- 回答日時:
a案の場合
B5セルに「に」が入っていた場合は次のどれになりますか?
① A5「 」、B5「に」、C5「 」、A6「 」、B6「 」、C6「 」② A5「た」、B5「に」、C5「つ」、A6「た」、B6「ち」、C6「つ」③ A5「 」、B5「に」、C5「 」、A6「た」、B6「ち」、C6「つ」
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/05 09:30
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
excelのデータで色つき行の抽出...
-
エクセル マクロで数値が変っ...
-
AのセルとB行を比較して、一致...
-
結合されたセルをプルダウンの...
-
Excel グラフのプロットからデ...
-
エクセル 上下で列幅を変えるには
-
特定の文字がある行以外を削除...
-
excel 小さすぎて見えないセル...
-
エクセルVBA 最終行を選んで並...
-
エクセルVBA:リストに登録した...
-
エクセルで昨日までの日付デー...
-
エクセル 数字のみ残したい
-
VBAで色の付いているセルの行削除
-
エクセル2016で時間を入力して...
-
Excelでカタカナ・ひらがな・英...
-
電話番号の入力方式が違うデー...
-
罫線の斜線を自動で引くマクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報
すみません…
投稿したら空白がずれてしまったようです。
A列に あ 段
B列に い 段
C列に う 段
D列に 数字
E列に お 段
が表示されています。
ありがとうございます!
①はい!その通りです!
a案
②の場合はコピーをしない
③の場合は空白セル分だけコピーする
b案
②③の場合はエラーメッセージを出す
できればa案希望ですがb案でも構いません。
分かりにくくてすみませんがアドバイスお願い致します。
その場合、入力ミスなので…
④ A5「た」、B5「ち」、C5「つ」、A6「た」、B6「ち」、C6「つ」
がいいです!