エクセルVBAで、Rangeのデバックプリント方法について質問です。


Rangeのデータをデバックプリントする方法はいくつかありますが、
一番最良の方法を教えて下さい。
カンマ区切りで2次元配列を表示できるような感じになるかと思います。

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/11/20 00:53:29
  • 終了:2011/11/22 22:22:21

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/11/20 01:17:16

ポイント50pt

Sub main()
    Dim r As Excel.Range
    Set r = Range("A1:B3")
    Call d_print(r)
End Sub

Sub d_print(r As Range)
    Dim i, k As Long
    For i = 1 To r.Rows.Count
        Debug.Print r.Cells(i, 1).Value;
        For k = 2 To r.Columns.Count
            Debug.Print "," & r(i, k).Value;
        Next k
        Debug.Print ""
    Next i
End Sub

一塊の文字列にしてから出力するのではなく、
セル1つ1つを出力するほうが、
トラブル発生箇所を特定しやすくなるため上記のようにしてあります

他1件のコメントを見る
id:pochi1234

Msgboxを使用してRange内容を行列で表示する方法がほしかったです。
質問が明確ではなくてすみません。
ですが ご回答頂きありがとうございます。

2011/11/22 22:21:51
id:windofjuly

>Msgboxを使用してRange内容を行列で表示する方法がほしかったです
 
後だしされても、困るのですが・・・
次からは先に言ってくださいね
下記が例です

Sub main()
    Dim r As Excel.Range
    Set r = Range("A1:B3")
    Call d_print(r)
End Sub

Sub d_print(r As Range)
    Dim i, k As Long, s As String
    s = ""
    For i = 1 To r.Rows.Count
        s = s & r.Cells(i, 1).Value
        For k = 2 To r.Columns.Count
            s = s & " , " & r(i, k).Value
        Next k
        s = s & vbCrLf
    Next i
    MsgBox s
End Sub
2011/11/22 22:48:47

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/11/20 01:17:16ここでベストアンサー

ポイント50pt

Sub main()
    Dim r As Excel.Range
    Set r = Range("A1:B3")
    Call d_print(r)
End Sub

Sub d_print(r As Range)
    Dim i, k As Long
    For i = 1 To r.Rows.Count
        Debug.Print r.Cells(i, 1).Value;
        For k = 2 To r.Columns.Count
            Debug.Print "," & r(i, k).Value;
        Next k
        Debug.Print ""
    Next i
End Sub

一塊の文字列にしてから出力するのではなく、
セル1つ1つを出力するほうが、
トラブル発生箇所を特定しやすくなるため上記のようにしてあります

他1件のコメントを見る
id:pochi1234

Msgboxを使用してRange内容を行列で表示する方法がほしかったです。
質問が明確ではなくてすみません。
ですが ご回答頂きありがとうございます。

2011/11/22 22:21:51
id:windofjuly

>Msgboxを使用してRange内容を行列で表示する方法がほしかったです
 
後だしされても、困るのですが・・・
次からは先に言ってくださいね
下記が例です

Sub main()
    Dim r As Excel.Range
    Set r = Range("A1:B3")
    Call d_print(r)
End Sub

Sub d_print(r As Range)
    Dim i, k As Long, s As String
    s = ""
    For i = 1 To r.Rows.Count
        s = s & r.Cells(i, 1).Value
        For k = 2 To r.Columns.Count
            s = s & " , " & r(i, k).Value
        Next k
        s = s & vbCrLf
    Next i
    MsgBox s
End Sub
2011/11/22 22:48:47
id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982011/11/21 22:17:33

ポイント50pt

まず VBAの画面で

[参照設定]ダイアログボックスの[参照]ボタンをクリックして、「C:\Windows\System32\FM20.DLL」もしくは「C:\WINNT\Sytem32\FM20.DLL」(OSによって異なります)を選択します。


これは クリップボードを取得するための関数を使えるようにするためです。
http://www.moug.net/tech/exvba/0150091.html

Sub test()
Call dprint(Range("C3:E5"))

End Sub

Sub dprint(rg As Range)
    rg.Copy
    
    Dim TempObject As MSForms.DataObject
    
  
    Set TempObject = New MSForms.DataObject
    
    With TempObject
        .GetFromClipboard
        Debug.Print .GetText
    End With
        
    Set TempObject = Nothing

End Sub
他2件のコメントを見る
id:pochi1234

質問の趣旨と違うのか私のレベルが低いのか理解が難しいです。
クリップボードは使用せずに、Msgboxを使用してRangeを表示する方法がほしかったです。

ですが、そういう方法があるということを教えて頂きありがとうございます。

2011/11/22 22:19:57
id:taknt

残念ながら Msgboxを使用するのは 一番最良の方法とは 思ってません。

デバッグプリントは イミディエイトに出力するものですし。

2011/11/27 21:42:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません