Excel VBA質問箱 IV

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

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


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

【29357】コメントの挿入 VBA一年生 05/10/2(日) 20:16 質問[未読]
【29358】Re:コメントの挿入 かみちゃん 05/10/2(日) 20:23 発言[未読]
【29359】Re:コメントの挿入 VBA一年生 05/10/2(日) 21:08 お礼[未読]
【29362】Re:コメントの挿入 awu 05/10/3(月) 1:22 回答[未読]
【29369】Re:コメントの挿入 VBA一年生 05/10/3(月) 17:33 お礼[未読]
【29378】Re:コメントの挿入 awu 05/10/4(火) 0:13 発言[未読]
【29382】Re:コメントの挿入 ichinose 05/10/4(火) 7:20 発言[未読]
【29458】Re:コメントの挿入 VBA一年生 05/10/5(水) 20:59 お礼[未読]

【29357】コメントの挿入
質問  VBA一年生  - 05/10/2(日) 20:16 -

引用なし
パスワード
   すいません。
日曜日をつぶして調べまくったんですけどわかりません。
マクロで下の文字列をアクティブセルのコメントに挿入したいんですけど、
入ってくれません。この形を崩すことはできないんです。

 a     s    r t                         
            y u   h    f     d    a     
      s    g  n  u                       
   d     r   b z   awwbjkfjkgfykf              
       kej y d                           
      dqcd e t y    f     y    f   w       
      tt     f                               w dg    j k     b    c     s   w r    
     hjk n   k                                
        a    c n    j     u    t     r         j
       df  gu  o
 sdfh jve j  svh  frimw
afitmigehklhgr 

なんでこんな文字列が必要なのかはできれば聞かないで欲しいです。
コードは

Sub コメント()

  With ActiveCell
    .ClearComments
    With .AddComment.Shape
       .Width = 252.08
      .Height = 184.67
      ' .Parent.Visible = True
    
       Dim iyaho1 As String, iyaho2 As String, iyaho3 As String
       Dim iyaho4 As String, iyaho5 As String
     
     iyaho1 = "1行目" & Chr(10) & "2行目" & Chr(10) & "3行目" & Chr(10) 
     iyaho2 = "4行目" & Chr(10) & "5行目" & Chr(10) & "6行目" & Chr(10)     
     iyaho3 = "7行目" & Chr(10) & "8行目" & Chr(10) & "9行目" & Chr(10)    
     iyaho4 = "10行目" & Chr(10) & "11行目" & Chr(10) & "12行目" & Chr(10) & "13行目"
        
      .TextFrame.Characters.Text = iyaho1 & iyaho2 & iyaho3 & iyaho4 & iyaho5
  
    End With
  End With

End Sub

変数で五つに分けたのは、少しでも見やすくするためです。
あと"n行目"とかいうのは
あの文字列をそのまま書くと大変見づらいからです。
エディタの中ではそのまま書きます。

 どこがいけないのでしょうか、教えて頂けるとありがたいです。
 よろしくお願いします。

【29358】Re:コメントの挿入
発言  かみちゃん  - 05/10/2(日) 20:23 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>コードは

このコードをこのまま実行すると、
1行目
2行目
 :
13行目
と、挿入されましたよ。(Excel2002 SP3で確認済み)

まったく挿入されないのですか?
Excelのバージョンは何ですか?
それとも、コードでエラーが出るのですか?

【29359】Re:コメントの挿入
お礼  VBA一年生  - 05/10/2(日) 21:08 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>コードは
>
>このコードをこのまま実行すると、
>1行目
>2行目
> :
>13行目
>と、挿入されましたよ。(Excel2002 SP3で確認済み)
>
>まったく挿入されないのですか?
>Excelのバージョンは何ですか?
>それとも、コードでエラーが出るのですか?

返信ありがとうございます。
エラーとかじゃなくてコメントの枠とかは入るんですけど
肝心のテキストが全く挿入されないんです。
色々やってみたらテキストの半分ぐらいだけ挿入すると
なぜか入るんです。
うちのもExcel2002なんですけどね...。
全く謎です。
あと調べていたら「Chr関数が使える数には限りがある」らしき
記述をみつけたのですがなにか関係がありますか?
それとも単に僕の国語力が悪いだけですかね....。

【29362】Re:コメントの挿入
回答  awu  - 05/10/3(月) 1:22 -

引用なし
パスワード
   こんな感じで如何でしょうか。

但し、コメントの改行位置は、この掲示板の表示通りにしていますので、
行の文字数制限に影響されている場合は、修正が必要かも知れません。

Sub コメント()
Dim ComTxt As String
With ActiveCell
  .ClearComments
  With .AddComment.Shape
    .Width = 360
    .Height = 160
  End With
  ComTxt = _
  " a     s    r t" & vbLf & _
  "            y u   h    f" & _
  "     d    a" & vbLf & _
  "      s    g  n  u" & vbLf & _
  "   d     r   b z   awwbjkfjkgfykf" & vbLf & _
  "       kej y d" & vbLf & _
  "      dqcd e t y    f     y" & _
  "    f   w" & vbLf & _
  "      tt     f           " & _
  "               " & _
  "     w dg    j k     b    " & vbLf & _
  "c     s   w r" & vbLf & _
  "     hjk n   k" & vbLf & _
  "        a    c n    j     u" & _
  "    t     r" & "         j" & vbLf & _
  "       df  gu  o" & vbLf & _
  " sdfh jve j  svh  frimw" & vbLf & _
  "afitmigehklhgr"
  .Comment.Text Text:=ComTxt
End With
End Sub

【29369】Re:コメントの挿入
お礼  VBA一年生  - 05/10/3(月) 17:33 -

引用なし
パスワード
   ▼awu さん:
>こんな感じで如何でしょうか。
>
>但し、コメントの改行位置は、この掲示板の表示通りにしていますので、
>行の文字数制限に影響されている場合は、修正が必要かも知れません。
>
>Sub コメント()
>Dim ComTxt As String
>With ActiveCell
>  .ClearComments
>  With .AddComment.Shape
>    .Width = 360
>    .Height = 160
>  End With
>  ComTxt = _
>  " a     s    r t" & vbLf & _
>  "            y u   h    f" & _
>  "     d    a" & vbLf & _
>  "      s    g  n  u" & vbLf & _
>  "   d     r   b z   awwbjkfjkgfykf" & vbLf & _
>  "       kej y d" & vbLf & _
>  "      dqcd e t y    f     y" & _
>  "    f   w" & vbLf & _
>  "      tt     f           " & _
>  "               " & _
>  "     w dg    j k     b    " & vbLf & _
>  "c     s   w r" & vbLf & _
>  "     hjk n   k" & vbLf & _
>  "        a    c n    j     u" & _
>  "    t     r" & "         j" & vbLf & _
>  "       df  gu  o" & vbLf & _
>  " sdfh jve j  svh  frimw" & vbLf & _
>  "afitmigehklhgr"
>  .Comment.Text Text:=ComTxt
>End With
>End Sub


できました!!
返信ありがとうございます!
vbLfというコードについては自分でしらべることにします。
本当にありがとうございました。

【29378】Re:コメントの挿入
発言  awu  - 05/10/4(火) 0:13 -

引用なし
パスワード
   > できました!!
> vbLfというコードについては自分でしらべることにします。

出来て良かったのです。 でもこれ↑で気付いたのですが、当初質問の要旨は、

> どこがいけないのでしょうか

でしたね。 原因について触れなかったのが ちょっと気になったので追記します。

>「Chr関数が使える数には限りがある」らしき
> 記述をみつけたのですがなにか関係がありますか?

別に Chr(10) の多用が、直接の原因ではないと思います。
Chr(10) = VbLf は True ですね。 単にVBの定数に変えただけです。

それで、当初のコードでコメント文が、何も表示されないのは、

 .TextFrame.Characters.Text = の記述で Characters メソッドを使用したことと、
呪い文?のような長いコメント文が起因しているからではないかと思います。 

Charactersの引数である Start と Length を省略していますので、指定した文字列全体が
対象になりそうですが、提示したコメント文は、255文字を超えていますので、全て無視され
何も表示されない状態になったようです。(テスト結果の推測です。)

その点、Charactersのヘルプに制限について何らかの説明があっても良さそうですが・・・

> 全く謎です。

そうですね。 こちらも最初はちょっと不思議に思いましたが・・・
確かに255文字までは、当初提示のコードで表示になりますね。

という訳で、 Characters を使わず、Comment.Text Text:=ComTxt にしました。

【29382】Re:コメントの挿入
発言  ichinose  - 05/10/4(火) 7:20 -

引用なし
パスワード
   ▼awu さん、皆さん、おはようございます。

>
>>
>それで、当初のコードでコメント文が、何も表示されないのは、
>
> .TextFrame.Characters.Text = の記述で Characters メソッドを使用したことと、
>呪い文?のような長いコメント文が起因しているからではないかと思います。 
>
>Charactersの引数である Start と Length を省略していますので、指定した文字列全体が
>対象になりそうですが、提示したコメント文は、255文字を超えていますので、全て無視され
>何も表示されない状態になったようです。(テスト結果の推測です。)

TextFrameオブジェクトを使用して以下のコードを実行してみてください。

'=================================================================
Sub test()
  With ActiveCell
    .ClearComments
    With .AddComment
      With .Shape
       .Width = 200
       .Height = 3000
       For idx = 1 To 26
        For jdx = 1 To 20
          .TextFrame.Characters(420 * (idx - 1) + 21 * (jdx - 1) + 1, 21).Text = String(20, Chr(64 + idx)) & vbLf
          Next
        Next
       End With
      
      End With
    End With
  
End Sub

つまりCharactersに引数を指定して、少しずつ指定する方法です。
但し、これでも行数には限界あるようですね!!


これは

'===============================================================
Sub test2()
  Dim txt As String
  With ActiveCell
    .ClearComments
    With .AddComment
      With .Shape
       .Width = 200
       .Height = 3000
       End With
     
      For idx = 1 To 26
       For jdx = 1 To 20
         txt = txt & String(20, Chr(64 + idx)) & vbLf
         Next
       Next
      .Text Text:=txt
      End With
    End With

End Sub

のCommentオブジェクトのTextプロパティを使用しても同じです。


もっとも、オ−トシェイプではなく、コメントならば、
testよりもtest2の方法が何かと簡単そうですけどね!!

尚、TextFrameに関しては、Jakaさんの目安箱でも

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=63;id=FAQ

で検証されています。

【29458】Re:コメントの挿入
お礼  VBA一年生  - 05/10/5(水) 20:59 -

引用なし
パスワード
   awu さん
ichinose さん

ご親切にお教えくださってありがとうございます。
教えてくださったコードを元にVBAを勉強していきたいと
思います。
まあ、ですがCharactersメソッドとか
まだほとんど理解しきれてないんですけどね・・・。
VBA始めたばかりなので
たぶんこれからも質問させて頂くと思いますので
よろしくお願いします。

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