Microsoft Access 掲示板

Excelのセル内にTABを入れる

9 コメント
views
4 フォロー

AccessからExcelにデータを出力する際、セルにタブを入れたいのですが、

strMoji1 = Dept1 & Dept2 & Dept3 '組織
strMoji2 = Position1 & "/" & position2 & "/" position3 '役職など

'組織と役職の間にタブを入れたい
xlSheet.cells(1,1).value = strMoji1 & vbTab & vbTab & strMoji2のような代入ではタブが解除されてしまいます。

何か方法はありますでしょうか?

momo
作成: 2022/07/28 (木) 22:53:02
通報 ...
1

エクセルのセル内ではタブ文字は空白として表示できない仕様です。

Cells(1,1).Value = "AAA" & vbTab & "BBB"

下の画像は、上記のコードを実行したシートです。

画像1

セルでは空白はないですが、数式バーは空白(タブ)が表示されてます。
セルをコピーしてテキストエディターに貼り付けるとちゃんとタブは挿入されています。

つまり、タブが削除されるのではなく、タブはあるがセル内では表示されないということです。

セル内で空白を表示したいのなら、スペースを使うしかないです。

2

ご回答ありがとうございます。
なるほどです。タブはあるがセル上、表示されていないということですね。

このセル内が横に複数列あり、 ひとつひとつのセル内にvbCrLfで改行を入れ、最大10数行程度になります。
そして、これらが数十から数百くらいの行で構成されています。

ですので、列ごとにタブを入れて、文字の左面を合わせたいというのが目的です。
単に複数の半角スペースを入れただけですと、この目的が達成できないのがご相談の真の内容です。

タブを1つもしくは2つ入れた場合のように、スペースを入れられれば解決するのですが、難易度が高く挫けております。

3

1セル内で表形式のような見栄えで表示したいということでしょうか。
最終目的は、印刷ですか。

VBAでスペースを適切に挿入するようにすれば可能だとは思いますが、
表計算ソフトのエクセルでやるようなことではないように思います。

4

ご想像の通りでして、仰ることもごもっともです。
そうではありますが、どうしてもやりたいと思っていまして。

フォントはMSゴシックで、ひとまず下記のようにスペースを
埋めました。イミディエイトウインドウ上では全て字面が
合っているのですが、Excel上ではズレが生じています。

debug.print addSpace("AAA") & "BBB"

Cells(i,j).Value = addSpace("AAA") & "BBB"

debug.print Cells(i,j).Value

Function addSpace(strDept As String) As String

    addSpace = strDept & Space(40 - LenB(strDept))

End Function

5

タブをスペースに変換する関数を作成してみました。

Public Function Tab2Spaces(s As String, n As Long)
    Dim lines: lines = Split(s, vbLf)
    Dim l
    For Each l In lines
        Dim a: a = Split(l, vbTab)
        Tab2Spaces = RTrim(Tab2Spaces) & vbLf
        Dim i
        For Each i In a
            Tab2Spaces = Tab2Spaces & Format(i, "!" & String(n, "@"))
        Next
    Next
    Tab2Spaces = Mid(Tab2Spaces, 2)
End Function

上記のコードを標準モジュールにコピーしてください。

A1セルにタブと改行を含むテキストを貼り付けます。その後、下記のコードを実行します。

Public Sub test()
   Range("A2") = Tab2Spaces(Range("A1"), 8)
End Sub

実行後のシート↓

画像1

8

フォントは等幅フォントにしてください。
半角文字が前提です。全角文字が含まれるとずれます。
第2引数で指定した数字より長い単語があるとずれまず。

9
hatena 2022/07/29 (金) 20:59:08 修正 >> 8

全角文字が含まれていても揃うように修正しました。

Public Function Tab2Spaces(s As String, n As Long)
    Dim lines: lines = Split(s, vbLf)
    Dim l
    For Each l In lines
        Dim a: a = Split(l, vbTab)
        Tab2Spaces = RTrim(Tab2Spaces) & vbLf
        Dim i
        For Each i In a
            Dim num As Long
            num = n - LenB(StrConv(i, vbFromUnicode))
            If num < 0 Then num = 0
            Tab2Spaces = Tab2Spaces & i & Space(num)
        Next
    Next
    Tab2Spaces = Mid(Tab2Spaces, 2)
End Function

画像1

6

失礼しました。フォントがBoldになっておりまして、これを修正したら字面が合いました。

7

ありがとうございます。
素晴らしいです。確認させていただきます。