
ExcelのVBAを組みたいのですが、イマイチうまくハマりません。
A B C D E
1【日時】 2020/11/25
2【名前】 佐藤、田中
3
4
5
6(詳細) 名前 性別 年齢 役職
7 佐藤 男 40 社員
上記のようなセルの値を1つテキストボックスにまとめてシート内に表示したいのですが、なかなか上手くいきません。
出来ない事としては
①
セルの位置関係をそのままにしてテキストボックス化
②
セルの行に空欄がある場合に上に詰めた状態でテキストボックス化
となります。
そのまま、テキストボックスを作成してコピペしても①の位置関係がズレてしまい改行も出来ない状態になってしまいます。
どなたかご教示のほどお願いいたします。
No.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

ご丁寧にソースコードまでありがとうございます。
少し試してみて、中身の構文について自分で勉強して理解してみます。
この度はありがとうございました。
No.3
- 回答日時:
①は、列の区切りにvbTab、行の区切りにvbLfを連結してテキストボックス化すれば良いだけのような気がするのですが、それではダメなのでしょうか?ダメな場合、何がダメなのでしょうか?
②は、ちょっと意味が分かりません。行の中にひとつでも空白のセルがある場合は、その行は無かったことにして、上に詰める?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルで日数から年月への変換
Excel(エクセル)
-
【至急】Excelで下記を計算するにはどのような関数で記載すればよいのですか?
Excel(エクセル)
-
Excel2010でVLOOKUP関数の応用について
Excel(エクセル)
-
4
エクセルの関数を教えて下さい 全データは38000行有ります。 A列は基本データが有ります。 区分1
Excel(エクセル)
-
5
エクセルで、2つのシートから一致しない部分を取り出したいです。
Excel(エクセル)
-
6
エクセルで入力した右のセルを他の場所に表示させたいです
Excel(エクセル)
-
7
エクセルの便利機能について教えてください。 現在、私は以下のテクニックを使うことができます。 これら
Excel(エクセル)
-
8
Excel VBA ユーザー定義関数 複数のセルを一つのセルにまとめたい
Excel(エクセル)
-
9
pdfファイル名の一括リネームの仕方
Excel(エクセル)
-
10
PDFのファイル名をリネームをしたい(若干複雑かもしれません)
Excel(エクセル)
-
11
エクセルに詳しい方、教えて頂けないでしょうか。 64という数字があるとして、60から70までの範囲に
Excel(エクセル)
-
12
セルに入力したら発動するマクロを、列の指定した範囲のセル全てに設定する方法。
Excel(エクセル)
-
13
Excelにて、行の各セルに入力すると別の特定のセルに入力順に新しいデーターへ書き換わる
Excel(エクセル)
-
14
excelのVBAについてです。 調べても全然分からなかったので 教えてください。 F列3行目に数字
Excel(エクセル)
-
15
EXCELの指定範囲の並び替えを特別な規則で行うには?(ExcelVBA)
Excel(エクセル)
-
16
エクセルで少し複雑な当番表を作成したい。
Excel(エクセル)
-
17
エクセルについて教えて下さい
Excel(エクセル)
-
18
エクセル横列データを縦列に変換(再質問)
Excel(エクセル)
-
19
エクセルで在庫の入荷日管理をしたいのですが わかる方教えてください。
Excel(エクセル)
-
20
ループのマクロ 高速化なりませんか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
excelの特定のセルの隣のセル指...
-
5
excelのCOUNTIF関数で、『範囲=...
-
6
EXCEL VBA で特定の文字に色を...
-
7
エクセルで指定したセルのどれ...
-
8
貼り付けで複数セルに貼り付けたい
-
9
エクセル 足して割る
-
10
Excelについて(セル内の文字を...
-
11
VBAで特定の文字が入力されたセ...
-
12
対象セル内(複数)が埋まった...
-
13
【エクセル】IF関数 Aまたは...
-
14
エクセルのセルの枠を超えて文...
-
15
エクセルのセル分割
-
16
VBAでの結合セルのコピー&ペー...
-
17
セルをクリック⇒そのセルに入力...
-
18
エクセルの一つのセルに複数の...
-
19
エクセルで「コピー領域と貼り...
-
20
Excelの下側の空行を消したい
おすすめ情報
公式facebook
公式twitter