質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.36%

別エクセルブックの任意のセルから文字列を取得し、元エクセルのコメント欄に表示したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 43K+

MCK

score 7

発生している問題

エクセル【A】からVBAマクロを起動して、エクセル【B】上のセル(A1)の文字列を取得し、エクセル【A】上のセル(A1)のコメント欄にセットしたいです。

ですがうまくいかないので、まずは【A】のセル(A1)に文字列をセットするようコーディングして試しています。

(1)別ブックから文字列を取得するには、ソースコードをどう修正したらよいですか。
(2)別ブックのセル(A1)から文字列を取得して、セル(A1)のコメント欄に設定したい場合は、どうコーディングすればよいですか。

一昨日からいろいろ試していますが、解決できません。どなたかお知恵を貸していただけませんか。

マクロを動かすと、ソースコードの★箇所、右辺のreadSheet.Cells(1, 1).Value はエクセル【A】のA1データを取得しているようです。

該当のソースコード

<Excel 2013>
Sub Macro1()
'
Dim writeSheet As Worksheet                   '【A】自分自身の書き出し用ワークシート
Set writeSheet = ThisWorkbook.Worksheets(1)   '【A】1番左のワークシートを参照

mypath = "C:\Users\user\Desktop\test\"        '【B】
fname = "文字列取得用.xlsx"                   '【B】
Dim readBook As Workbook                      '【B】文字列取得用ブック
Set readBook = Workbooks.Open(mypath & fname) '【B】文字列取得用ブックを開いて参照
Dim readSheet As Worksheet                    '【B】文字列取得用ブックのワークシート
Set readSheet = readBook.Worksheets(1)        '【B】文字列取得用ブックの1番左の相手シートを参照

With writeSheet
.Range("A1").Value = readSheet.Cells(1, 1).Value  '★
End With

readBook.Close False                         '【B】エクセルブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

End Sub

試したこと

ネットでサンプルコードを調べてマクロを動かしてみましたが、別ブックから文字列取得ができず、その解決方法がわかりません。

補足情報(言語/FW/ツール等のバージョンなど)

Excel 2013
Windows7 64bit

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/05/02 18:20

    msgbox(Workbooks.Open("C:\Users\user\Desktop\test\文字列取得用.xlsx").worksheets(1).cells(1,1).value) という1行だけのSubを書いて、実行してみてください。 エクセル【B】上のセル(A1)の文字列が表示されますか?

    キャンセル

  • MCK

    2017/05/02 23:34

    回答が遅くなり、失礼しました。ご指定のコードを実施したところ【B】のセル(A1)が表示されました。

    キャンセル

回答 1

checkベストアンサー

+1

文字列の取得はString型の変数に格納すれば良いかと思います。

Dim myComment as String
myComment = readSheet.Cells(1,1).Value '・・・文字列取得用ブックのA1セルの値を文字列として取得

コメントの設定はソースコードの★箇所を以下の様にしてみてください。

With writeSheet.Range("A1")
.AddComment '・・・A1セルにコメントを追加する
.Comment.Visible = True '・・・追加したコメントを表示する
.Comment.Text Text:=readSheet.Cells(1,1).Value '・・・コメントの文章を代入する
End With

Valueプロパティはセルの値となりますのでコメントとは別物になります。
AddCommentメソッドでコメントを追加し、表示や文章、サイズ等設定できます。
因みにコメントの削除はClearCommentsメソッドを使用します。

その他設定の仕方、詳細については「vba AddComment」等で検索すると出てくるかと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/03 23:52

    返信が遅くなり、すみません。
    丁寧なご返信をどうもありがとうございます。
    AddCommentの解説まで、とても助かります。
    コードの解説がとても分かりやすいです。
    相談してよかったです!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • VBAに関する質問
  • 別エクセルブックの任意のセルから文字列を取得し、元エクセルのコメント欄に表示したい。