Excel(office365)を使っている者です。
以下はクリップボードに値のみをコピーするコードですが,範囲内に空白行があった場合,クリップボードには余計な改行が入ってしまいます。
最後の余計な改行を消したいため,ネットで調べて,For Each ary In Selection~nextを入れたのですが,型が一致しないということでエラーになってしまいます。どうすれば余計な改行を削除できるか,ご教示願います。よろしくお願いいたします。
---------------------------------------------------------------------------
Sub 値のみコピー()
Dim ary As Variant
ary = Range("A10:J30").Value
Dim myDO As New DataObject
Dim i As Long, j As Long
Dim strBuf As String
For i = 1 To UBound(ary, 1)
For j = 1 To UBound(ary, 2)
strBuf = strBuf & ary(i, j)
Next
strBuf = strBuf & vbCrLf '改行コードを付加
For Each ary In Selection
If Len(ary.Value) > 0 Then
Do While Right(ary.Value, 1) = vbLf
ary.Value = Left(ary.Value, Len(ary.Value) - 1)
Loop
End If
Next
Next
myDO.SetText strBuf
myDO.PutInClipboard
Set myDO = Nothing
End Sub
No.1ベストアンサー
- 回答日時:
前提条件として、A10:J30のセルの値を、1行ごとに区切り文字なしに連結して改行し、まとめてクリップボードに送るコードです。
以下の2点を実現するために、コードを修正してみました。
(1)範囲内に空白行があった場合、これを無視して、改行コードを入れない
(2)データの最後の改行を入れない
Sub send_clipboard()
Dim ary As Variant
Dim myDO As New DataObject
Dim i As Long, j As Long
Dim LineBuf As String
Dim strBuf As String
ary = Range("A10:J30").Value
For i = 1 To UBound(ary, 1)
For j = 1 To UBound(ary, 2)
LineBuf = LineBuf & ary(i, j)
Next
If (Len(LineBuf) > 0) And (i < UBound(ary, 1)) Then LineBuf = LineBuf & vbCrLf '空白行でなく、最終行でもないとき改行コードを付加
strBuf = strBuf & LineBuf
LineBuf = ""
Next
Set myDO = New DataObject
myDO.SetText strBuf
myDO.PutInClipboard
Set myDO = Nothing
End Sub
ご質問者の言う
>最後の余計な改行を消したい
という意味が「空白行の最後」なのか「データの最後」なのか曖昧たったので、「データの最後」も含むと解釈しましたが、「空白行の最後」のみという意味の場合、
If (Len(LineBuf) > 0) And (i < UBound(ary, 1)) Then ・・・・・・
というコードを
If (Len(LineBuf) > 0) Then ・・・・・・
に修正してください。
誠にありがとうございます。
お礼が遅くなり申し訳ありません。
動作を確認しましたが,希望どおりの動きでした。
実はコードについて調べても理解できない点があるため,教えていただけると幸いです。
---------------------------------
ary = Range("A10:J30").Value
For i = 1 To UBound(ary, 1)
For j = 1 To UBound(ary, 2)
LineBuf = LineBuf & ary(i, j)
---------------------------------
の部分ですが,UBound(ary, 1)では,何が戻り値になりますか?
また,LineBuf = LineBuf & ary(i, j)とはどういう処理でしょうか。
No.3
- 回答日時:
No.1,2です。
>strBufの変数には何の意味があるのでしょうか。
strBuf変数も、もともと、ご質問者のVBAに登場する変数であり、その意味を変更していません。
ご質問者のVBAでは、strBufは全てのセルを結合して一纏めにしたものですが、私のコードでもstrBuf変数は一行を一纏めにしたLineBuf変数を繋ぎあわせて複数行のデータに纏めたものです。つまり、結果としてすべのセルを一目纏めにしたものであり、その意味は変わっていません。
但し、私のコードでは、一行ごとに改行の要否判定を行っていますので改行コードの部分のみ違いが発生することになります。
方法論として「纏めてから改行コードを排除する」という方法ではなく「纏める前に改行の要否を判断する」という方法に変えただけです。
No.2
- 回答日時:
No.1です。
>UBound(ary, 1)では,何が戻り値になりますか?
aryにA10:J30のセル範囲を代入しているので、aryは行数21、列数10の2次元配列になります。
上記のとおり行数21ですので、行数である21が戻り値になります。
とはいえ、For i = 1 To UBound(ary, 1)は、もともとご質問者のVBAにもあるコードです。意味もわからずに使っていたということでしょうか?
>LineBuf = LineBuf & ary(i, j)とはどういう処理でしょうか。
上記説明のとおり、aryにA10:J30のセル範囲を代入しているのでary(i, j)は範囲内のセルの値を意味します。
iを固定して、jを進めれば、同じ行のセルの値を順次取得できます。
取得した値を次々とLineBufに&結合していけば一行分の結合データが出来上がります。
つまり、LineBufは一行分の結合データを作成するための変数です。
一行分の結合データが作成されたら、この長さをチェックして「長さ>0」のときだけ改行するようにすれば、空白セルでは改行されないことになります。
丁寧に教えていただき,ありがとうございます。
すみません。もう一点教えていただけると幸いです。
strBufの変数には何の意味があるのでしょうか。
確かに,書いていただいたコードを以下のように,strBufをなくして走らせると何もクリップボードに入らなくなってしまいますが。
Sub send_clipboard()
Dim ary As Variant
Dim myDO As New DataObject
Dim i As Long, j As Long
Dim LineBuf As String
ary = Range("A10:J30").Value
For i = 1 To UBound(ary, 1)
For j = 1 To UBound(ary, 2)
LineBuf = LineBuf & ary(i, j)
Next
If (Len(LineBuf) > 0) And (i < UBound(ary, 1)) Then LineBuf = LineBuf & vbCrLf '空白行でなく、最終行でもないとき改行コードを付加
LineBuf = ""
Next
Set myDO = New DataObject
myDO.SetText LineBuf
myDO.PutInClipboard
Set myDO = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除) 3 2023/09/06 23:37
- Visual Basic(VBA) フォルダの作成 3 2021/11/10 11:05
- Visual Basic(VBA) シートごとに 個数と集計 2 2021/10/25 22:00
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 3 2021/11/12 23:38
- Visual Basic(VBA) 条件をつけてカウントする 4 2021/12/19 20:27
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) Excelで別のブックから検索してセルのコピペをしたい 3 2021/10/21 11:10
- Excel(エクセル) VBA Scripting.Dictionary 連想配列 複数参照する方法 2 2021/12/17 01:52
- Word(ワード) word_VBA_フォームからダイアログそこからの復帰について 2 2021/12/13 23:44
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
EXCEL(VBA) 末尾の改行のみ削除したい
Excel(エクセル)
-
【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除)
Visual Basic(VBA)
-
Excel セル内の最初と最後の改行を削除
Excel(エクセル)
-
-
4
csvファイルを列数ごとに分割するExcelマクロが書けずに困っています
Visual Basic(VBA)
-
5
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
-
6
VBA とびとびの列を結合させる
Visual Basic(VBA)
-
7
[Excel] 以下のような、行がズレている2つの表を関数を使って同値チェックを行いたいです。 欲し
Excel(エクセル)
-
8
一つのフォルダーに50個のエクセルファイルがあります。 各ファイルにはAとBのシートがあります。 5
Visual Basic(VBA)
-
9
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
10
ExcelのVBAのことで質問です。 以下のコードを入れ、ボタンを押せば作動させると写真のように画面
Visual Basic(VBA)
-
11
excelのVBAについて、以下のコードに追加をお願いいたします。
Visual Basic(VBA)
-
12
【エクセル】セル最後にある無駄改行を検索・削除したい
Excel(エクセル)
-
13
エクセルおいて,論理式の関数を使う場合は,空白のセルは,数字では0と扱われますか?
Excel(エクセル)
-
14
複数のセルの入力文字数の合計の文字数制限のポップアップ
Excel(エクセル)
-
15
Vba ユーザ定義関数について教えてください
Visual Basic(VBA)
-
16
「ChatGPT-3.5」の回答ですが
Excel(エクセル)
-
17
Vba Cells.Findについて教えてください
Visual Basic(VBA)
-
18
VBA 同じ名前のオブジェクトを選択したいのですが
Visual Basic(VBA)
-
19
エクセル VBAでの転記の方法について
Visual Basic(VBA)
-
20
VBA 何かしら文字が入っていたら
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
ファイルから読み取った改行文...
-
VBAのコマンドボタンの文字列の...
-
C言語について。
-
VBAでCSVをExcelに取り込む時に...
-
JAVA System.out.println の ...
-
ラベル(スタティックテキスト)...
-
FORTRANで作成したテキストファ...
-
改行コードが半角スペースにな...
-
C++でのCRLFについて
-
C++で空Enterの入力を判...
-
英文のピリオドでのみの改行の仕方
-
コンボボックスの項目中に改行を
-
Getlineについて・・・・・・
-
改行が半角スペースに変わる
-
改行だけの行の削除
-
VBS 改行無しのファイル抽出方法
-
エクセルVBAのprintステートメ...
-
テキストボックス行の桁数を制...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
COBOLの改行
-
改行について
-
最終行の改行について
-
C++で空Enterの入力を判...
-
【VBA】エクセルで最後の不要な...
-
jsp 改行コードで改行させて表...
-
C++でのCRLFについて
-
ファイルから読み取った改行文...
-
テキストファイルから改行コー...
-
ExcelVBAでメールを作成してメ...
-
awkで改行を除いて文字列を抜き...
-
エクセルVBA 文字列領域が不足...
-
VBAでCSVをExcelに取り込む時に...
-
コンボボックスの項目中に改行を
-
JavaDoc コメントの改行について
-
Excel VBAからBeckyを起動して...
-
改行を読み飛ばす
おすすめ情報