アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 た  ち  つ ほ


よろしくお願い致します。

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

  • うーん・・・

    すみません…
    投稿したら空白がずれてしまったようです。

    A列に あ 段
    B列に い 段
    C列に う 段
    D列に 数字
    E列に お 段

    が表示されています。

      補足日時:2016/05/19 14:21
  • うーん・・・

    ありがとうございます!

    ①はい!その通りです!

    a案
    ②の場合はコピーをしない
    ③の場合は空白セル分だけコピーする

    b案
    ②③の場合はエラーメッセージを出す

    できればa案希望ですがb案でも構いません。
    分かりにくくてすみませんがアドバイスお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/05/19 15:06
  • うーん・・・

    その場合、入力ミスなので…

    ④ A5「た」、B5「ち」、C5「つ」、A6「た」、B6「ち」、C6「つ」

    がいいです!

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/05/19 15:25

A 回答 (6件)

① 下図のように左を右のようにするという事ですか?


② コピー先が空白でないときはどうするのですか?
③ 仮にD1セルの値が「3」の時はどうするのですか?
「Excel マクロで特定のセルに入ってい」の回答画像1
この回答への補足あり
    • good
    • 0

a案の場合


B5セルに「に」が入っていた場合は次のどれになりますか?
① A5「 」、B5「に」、C5「 」、A6「 」、B6「 」、C6「 」② A5「た」、B5「に」、C5「つ」、A6「た」、B6「ち」、C6「つ」③ A5「 」、B5「に」、C5「 」、A6「た」、B6「ち」、C6「つ」
この回答への補足あり
    • good
    • 0

ずれてしまいました。


B5セルに「に」が入っていた場合は次のどれになりますか?
① A5「 」、B5「に」、C5「 」、A6「 」、B6「 」、C6「 」
② A5「た」、B5「に」、C5「つ」、A6「た」、B6「ち」、C6「つ」
③ A5「 」、B5「に」、C5「 」、A6「た」、B6「ち」、C6「つ」
    • good
    • 0

こんにちは



ご質問文にあるままにコード化すればよいと思いますが、数値が示す範囲が重複している場合は、処理の手順によって結果に違いが出る可能性がありますね。

とりあえずのサンプルです。
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行目の結果が異なるという可能性があります。
※ このような範囲の重複を事前にチェックすることも可能ですが、サンプルでは行っていません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おっしゃる通り、答えが思っている通りではないものが出てきてしまいました…
最大行から逆順に処理する方法だと構文が変わってくるのでしょうか?

お礼日時:2016/05/19 22:32

この質疑の流れを読んでいて、



>おっしゃる通り、答えが思っている通りではないものが出てきてしまいました…
もしかしたら、辻褄があわなくなってしまったというか、C列の数字と、貼り付け行との矛盾点が出てきたのではないでしょうか。

たぶん、最初の質問の内容に、抜けている部分があったのではないかと私は読みました。あまりに単純化したために、実務的な内容とは違う部分があるのではないかと思います。

#4さんのご想像通りだとしても、それ自体は、ご質問者さんから明確な不具合を指摘されないと、傍からみていると、二の矢はつげられないと思うのです。

問題になる場合は、どういう状態の時になったのか、それが書かれていないままに、違うコードを書いても無駄になってしまうと思います。

逆順にやってほしいと、リクエストのままに、回答者の皆様がたがコードを書くのはやぶさかではないでしょうけれども、VBAマクロは、論理に従って書かれますから、逆順でどうなるということではなく、どういう問題に対して、逆順で処理するか、ということになるはずです。

その問題がどういう状態なのか教えていただいた上での話で、またD列の数字そのものが、コピーの回数だけの意味なら、逆順で処理する必要はないと思います。(私の考えるコードではという意味ですが。)

例えば、こんな場合、D列の数字を必ず実行させ、空白に埋めていくというなら、このようになります。
「Excel マクロで特定のセルに入ってい」の回答画像5
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問初心者でごめんなさい。。
補足に書くべきかこちらに書くべきかすら迷いながらで…

うまく説明できるか不安ですが、fujillinさんに教えていただいたマクロを実行するとWindFallerさんが書いていただいた通り、5行目が「あいう」になりました。
しかし、Ð列の数値よりも空白かどうかを最優先にしたいのです。
D1の数値が4だとしてもその下の段に1段しか空いていなければ1段のみのコピーで、次はⅮ3の2に対して考える…というようにしたいのです。
伝え方が下手であればご指摘ください。

お礼日時:2016/05/21 22:31

#5の回答者です。


こういう場合、だいたい、回答者の一人が、業を煮やして、キメウチで作ってしまうケースが多いようです。しかし、今回も、こちらはコード見送りました。

言葉よりも、画像のほうが情報が速く正しく伝わりますから、一度、そういう説明の仕方も考えたほうがよいでしょうね。今回も画像を付けます。(ツールは、FastStones Capture for Windowを使用)

原則があって、各々の条件を導きだす方法のほうが楽ですね。

>Ð列の数値よりも空白かどうかを最優先する
 --空白でなかったらコピーをしない

>D1の数値が4だとしてもその下の段に1段しか空いていなければ1段のみのコピー
 --つまり画像の②のような場合は、コピーしない。
 ということになります。

◯画像では、行の終わりを取り入れて6行までとしました。
そうすると、余りがあっても、それもコピーしないとなります。
「Excel マクロで特定のセルに入ってい」の回答画像6
    • good
    • 0

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