Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


926 / 13644 ツリー ←次へ | 前へ→

【77472】セル内への文字入力 桃太郎 15/10/15(木) 3:45 質問[未読]
【77473】Re:セル内への文字入力 β 15/10/15(木) 7:38 発言[未読]
【77474】Re:セル内への文字入力 桃太郎 15/10/15(木) 16:31 質問[未読]
【77475】Re:セル内への文字入力 β 15/10/15(木) 17:49 発言[未読]
【77476】Re:セル内への文字入力 桃太郎 15/10/15(木) 18:25 お礼[未読]

【77472】セル内への文字入力
質問  桃太郎  - 15/10/15(木) 3:45 -

引用なし
パスワード
   よろしくお願いします。


選んだセルに、特定セルに書かれている文字を入力するというマクロを使っており
重宝しております。例えば

Selection.Value = Cells(3, 2).Value


というコードですが、これだと結合セルにはうまく行かずデバックを要求されました。

どうすればいいか教えていただければ幸いです。

【77473】Re:セル内への文字入力
発言  β  - 15/10/15(木) 7:38 -

引用なし
パスワード
   ▼桃太郎 さん:

結合セルも考慮するなら

Selection(1).Value = Cells(3, 2).Value

としてください。

【77474】Re:セル内への文字入力
質問  桃太郎  - 15/10/15(木) 16:31 -

引用なし
パスワード
   ▼β さん:

申し訳ありません。未熟なため、質問内容自体に私の勘違いがありました。

元に書いたコードでも結合セルに文字入力は出来ました。

デバックを要求されたのは、そこから改良しようと思ったコード自体に誤りがあるようです。

Selection.Value = Selection.Value & Cells(21, 17).Value

これは選択したセルの内容を残しつつ、そこからさらにCells(21, 17)の文字を
書き込めるようにしたつもりですが、この構文が間違っているようです。

再度申し訳ありませんがご指導ください。

【77475】Re:セル内への文字入力
発言  β  - 15/10/15(木) 17:49 -

引用なし
パスワード
   ▼桃太郎 さん:

Selection.Value = "hoge"

Slectionが結合セルであろうとなかろうと、このコードは 左辺のSelection のすべてのセルに右辺の値が代入されます。
で、Selectionが結合セルの場合は、結果的に、Selectionの先頭セル(結合セルの代表セル)以外の値は空白にされるということです。
結合セルではない、通常の複数セル領域を選択して試してみてください。

それは、さておき、今回の質問ですが、

Selection.Value = Selection.Value & Cells(21, 17).Value

左辺のSelection は上記で説明した通りですが問題は【右辺】のSelection.
ここが複合せルですね。複合セルということは複数セル領域です。

たとえば、 MsgBox Range("A1:A2").Value & "hoge"

こんなコードを実行するとエラーになります。
複数セル領域のValue は 1つの値ではなく【配列】になった値です。
左辺も右辺も配列であれば、転記はできますが、右辺が 配列に単一の値を付加したもの。
こういった値は生成できません。

このあたり、ややこしいかもしれませんが、右辺を【単一の値】にする必要があります。

Selection.Value = Selection(1).Value & Cells(21, 17).Value

にしてください。

ところで、Cells(21, 17).Value これって、わかりにくくないですか?
Range("Q21").Value のほうがわかりやすくないですか?

【77476】Re:セル内への文字入力
お礼  桃太郎  - 15/10/15(木) 18:25 -

引用なし
パスワード
   ▼β さん:

>左辺のSelection は上記で説明した通りですが問題は【右辺】のSelection.
>ここが複合せルですね。複合セルということは複数セル領域です。

>左辺も右辺も配列であれば、転記はできますが、右辺が 配列に単一の値を付加したもの。
>こういった値は生成できません。
>このあたり、ややこしいかもしれませんが、右辺を【単一の値】にする必要があります。


大変わかりやすい説明ありがとうございます。
何が問題なのか、非常によくわかりました。


>Selection.Value = Selection(1).Value & Cells(21, 17).Value
>にしてください。

これで解決できました。ありがとうございます。
Selection(1).Valueで結合セルの最初のセルの値だけ取り出せるわけですね。
こういうのはスキルが低いのかググってもたどりつけないので非常に助かります。


>ところで、Cells(21, 17).Value これって、わかりにくくないですか?
>Range("Q21").Value のほうがわかりやすくないですか?

以前はRangeで書いてましたが、変数を使いたい場合、
Range表現だと非常にややこしい形でないと変数が使えなかったので
以降Cellsで書いています。

前回に続き今回もわかりやすい解説とコード、感謝させていただきます。
ありがとうございました。

926 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free