「ブロック機能」のリニューアルについて

エクセルでペーストをVBAで行いたいんですが、D列の3行目から空白セルを探して下の行にペーストするコードを教えてください。

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

  • 説明足らずですいません。
    例えば、D3が空白であればD3にペーストし、
    D3が空白でなければD4にペーストし、
    D3とD4が空白でなければD5にペーストする。
    ようなことをしたいのです。それを33行目まで行いたいです。
    さらにD~G列はセルの結合をしております。
    ご教示よろしくお願いいたします。

      補足日時:2022/01/26 23:30
教えて!goo グレード

A 回答 (12件中1~10件)

以下のマクロを標準モジュールに登録してください。



Public Sub 貼り付け()
Dim wrow As Long
For wrow = 3 To 33
If Cells(wrow, "D").Value = "" Then
Range("BA6").Select
ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False
Cells(wrow, "D").Value = Range("BA6").Value
Range("BA6").Value = ""
Cells(wrow, "D").Select
Exit For
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

思い通りにできました。ありがとうございました。

お礼日時:2022/01/27 14:04

細かく制御するなら、No11の方のほうが良いですね。

    • good
    • 0

ユーザーフォームモジュールをダミー?的に追加すれば、直接取り出せますね。


http://officetanaka.net/excel/vba/tips/tips20.htm

一案としてですけど例えばD3になら、

Sub try()
Dim CB As New DataObject
With CB
.GetFromClipboard ''クリップボードからDataObjectにデータを取得する
Range("D3").Value = .GetText ''DataObjectのデータを変数に取得する
End With
End Sub

ユーザーフォームは無視でお願いいたします。

既出の回答から更に進めるってなら勉強にもなるかと。
気になるのはそのセル範囲に空白がなかった場合、『今回は貼り付け不可能』とか『もう次回は貼り付けできません』など、貼り付け実行前後にメッセージが必要なのかどうかかな?
    • good
    • 0

>例えば、D3が空白であればD3にペーストし、


>D3が空白でなければD4にペーストし、
>D3とD4が空白でなければD5にペーストする。
>ようなことをしたいのです。それを33行目まで行いたいです。

D3~D33のセルで、D3とD5が空白の場合、D3とD5にペーストするというこでしょうか。その場合、D3とD5は同じ内容になります。
それとも、D3にのみペーストして、マクロを終了するのでしょうか。

>さらにD~G列はセルの結合をしております。
結合セルに直接ペーストすることはできません。一旦、単独セルにペーストし、その単独セルの内容を結合セルにコピーする必要があります。
どこか空いている単独セルを提示してください。(例 Z1 等)
    • good
    • 0
この回答へのお礼

>D3~D33のセルで、D3とD5が空白の場合、D3とD5にペーストするという>こでしょうか。その場合、D3とD5は同じ内容になります。
>それとも、D3にのみペーストして、マクロを終了するのでしょうか。

この場合はD3のみペーストしたいです。

また、空いているセルはBA6でお願いします。

お礼日時:2022/01/27 08:38

wshでsendkeysをつかう


コードは自分で考えましょう
    • good
    • 1

No6の方の解釈がただしいかも知れませんね。


何れにしろ、質問者の方から、返信があると思いますので、もし私の提示したマクロが期待した動作でなかった場合は、その時対応したいと思います。
    • good
    • 1

No.5様。



私の勝手な思い込みかもですから後程質問者様から補足があると思います。

ただ同じ文章を拝見した際に、

・コピー元は特定の場所ではなく作業者が任意に選択しコピー作業をする。
・コピー先は決められたセル範囲の内、空白セルがあった所に貼り付ける。
・上記の作業をマウスで操作していると右クリックの手間がかかり、且つ抜き出す文章もそれなりにある。
・コピー元は仕方ないにしてもコピー先についてはボタン(イベント?)を押すだけで順次貼りついて欲しい(かな?)と考えついた。

と受け取りましたね。
まぁ読解力がないと質問者に言われた事もあるボケジジィなので、私の間違いであれば申し訳ないです。
    • good
    • 1

No4様


D3~D33の全ての空白のセルへ同じものを貼り付ける仕様で作成しています。
No2の回答のお礼に
「事前にあるサイトの一部の文字なみをコピーします。ペーストだけをマクロボタンで作業したいのです。量がたくさんあり、繰り返し作業するので...」
とあり、1回限りではないと、推測しました。
    • good
    • 0

#3さんへ。



貼り付け後にループ処理を抜けださないと、以降空白があれば全てに張り付いてしまうのでは?
    • good
    • 0

以下のマクロを標準モジュールに登録してください。



Public Sub 貼り付け()
Dim wrow As Long
For wrow = 3 To 33
If Cells(wrow, "D").Value = "" Then
Cells(wrow, "D").Select
ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

説明足らずですいません。
例えば、D3が空白であればD3にペーストし、
D3が空白でなければD4にペーストし、
D3とD4が空白でなければD5にペーストする。
ようなことをしたいのです。それを33行目まで行いたいです。
さらにD~G列はセルの結合をしております。
何度もすいません。
ご教示よろしくお願いいたします。

お礼日時:2022/01/26 23:30

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

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

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング