プロが教えるわが家の防犯対策術!

ExcelのVBAを組みたいのですが、イマイチうまくハマりません。

A B C D E
1【日時】 2020/11/25
2【名前】 佐藤、田中
3
4
5
6(詳細) 名前 性別 年齢 役職
7 佐藤 男 40 社員

上記のようなセルの値を1つテキストボックスにまとめてシート内に表示したいのですが、なかなか上手くいきません。

出来ない事としては

セルの位置関係をそのままにしてテキストボックス化

セルの行に空欄がある場合に上に詰めた状態でテキストボックス化

となります。

そのまま、テキストボックスを作成してコピペしても①の位置関係がズレてしまい改行も出来ない状態になってしまいます。

どなたかご教示のほどお願いいたします。

A 回答 (4件)

他のご質問者も指摘しておられますが、ご質問者のやりたい事、すでにできていること、課題となっていることが今ひとつ不明です。


ご質問者からの反応もありません。
このため、一部推測を含めて、サンプルのVBAを作成してみました。
テキストボックスの表示対象となる各セルに「セル内改行」があった場合、テキストボックス内で改行するとレイアウトが崩れてしまうので、「セル内改行」は削除する仕様です。
B2にあえて、セル内改行を含むデータを入れてテストしました。
添付画像①のデータがあったとして、このVBAを実行した結果が添付画像②です。

Sub Sample()
Dim Text_buf As String
Dim Line_buf As String
Dim i As Long
Dim j As Long
Dim Mystr As String

Text_buf = ""    '---テキストボックス書込みバッファをクリア
For i = 1 To 7    '---行範囲で繰り返し
Line_buf = ""    '---一行分のバッファをクリア
For j = 1 To 5    '---列範囲で繰り返し
Mystr = Cells(i, j).Value    '---対象セルの値をMystrに代入
Mystr = WorksheetFunction.Clean(Mystr)    '---セル内改行を削除
Line_buf = Line_buf & Trim(Mystr) & vbTab'---一行分のバッファにMystrの値をタブ連結で追加
Next
If Trim(Replace(Line_buf, vbTab, "")) <> "" Then'------一行分のバッファが空でなかったら
  Text_buf = Text_buf & Trim(Line_buf)'---テキストボックス書込みバッファに一行分を追加
  If i <> 7 Then    '---最終行でなかったら
    Text_buf = Text_buf & vbCrLf    '---改行する
  End If
End If
Next
Call textbox(Text_buf, "F1")'---指定セル位置にテキストボックスを作成し、テキストバッファを書き込む
End Sub

Sub textbox(str, area)
  Dim c As Range
  
  For Each c In ActiveSheet.Range(area)
  
    '---指定セル位置にテキストボックスを作成し、選択する
    ActiveSheet.Shapes.AddTextbox( _
      Orientation:=msoTextOrientationHorizontal, _
      Left:=c.Left, _
      Top:=c.Top, _
      Width:=c.Width, _
      Height:=c.Height).Select

    With Selection
      .Characters.Text = str  '---テキストに文字の内容を設定
      .AutoSize = True     '---自動サイズ調整にする
    End With
    c.Select  '---テキストボックス選択を解除
  Next
End Sub
「ExcelのVBAを組みたいのですが、イ」の回答画像4
    • good
    • 1
この回答へのお礼

ご丁寧にソースコードまでありがとうございます。
少し試してみて、中身の構文について自分で勉強して理解してみます。
この度はありがとうございました。

お礼日時:2020/12/03 15:36

①は、列の区切りにvbTab、行の区切りにvbLfを連結してテキストボックス化すれば良いだけのような気がするのですが、それではダメなのでしょうか?ダメな場合、何がダメなのでしょうか?



②は、ちょっと意味が分かりません。行の中にひとつでも空白のセルがある場合は、その行は無かったことにして、上に詰める?
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。
少し自分でも勉強してみようと思います。
また、参考にさせていただきます。

お礼日時:2020/12/03 15:35

No2さんと同じ意見です


少なくとも 自分で書いたコードを提示し
部分的に修正 というのならわからなくもありませんが
    • good
    • 1

ここで、説明しても、基礎知識ないので理解出来ないと思います。


エクセルVBAの参考書で勉強して下さい。
    • good
    • 2
この回答へのお礼

おっしゃる通りかと思います。
勉強します。
ご指摘ありがとうございます。

お礼日時:2020/12/03 15:34

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