A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#5の補足について
sh.Cells.はシート内全てを指します。 列、行の左上の角をクリックした時と同じ範囲です。
なので、個別セルをループさせる必要はありません。For~Next範囲を確認しましょう。
補足質問の場合は、下記のみでプロシージャを分けて示します
Sub Test()
Dim sh As Worksheet
On Error Resume Next 'エラーを無視
For Each sh In Worksheets
sh.Cells.SpecialCells(xlCellTypeComments).ClearComments
Next sh
End Sub
例えば、先のコメントを削除して新しいコメントを作成したい場合は、
同じモジュール内に#5のプロシージャ、上記削除プロシージャがある場合
#5のプロシージャから呼ぶ場合
Sub Test1()
Dim buf As Variant, i As Long, j As Long
Dim sh As Worksheet, Cel
Call Test 'を追加すれば削除プログラムが実行されてから下のコードに進みます。
buf = Array(Range("A1").Text, Range("A2").Text)
全く違う実行プロシージャを作成した場合は
Sub 実行()
Call Test
Call Test1
End Sub
のように書くことも出来ます。実行プロシージャを実行すると2つのプロシージャが順に実行されます。
プロシージャ名は適時変更しましょう。
ご質問の表題からだいぶ離れたのでこの辺で、、
No.5
- 回答日時:
#4補足について
>「A1、A2にコメントを挿入→Alt11→挿入から標準モジュール→貼り付け→F5」
勘違いと言う事で、了解しました。
>特定のセルに入れたコメントを元にほかのシートの同じセルにコピーするのは難しいのですね
これは、コメント文になる buf = "コメント"の変数bufに参照式で代入すれば可能です。
Sub Test1()の
bufをVarianにします。
標準モジュールに下記をコピペF5 または、F8でステップ実行で確認してください。
Sub Test1()
Dim buf As Variant, i As Long, j As Long
Dim sh As Worksheet, Cel
buf = Array(Range("A1").Text, Range("A2").Text)
Cel = Array("C1", "C2")
For Each sh In Worksheets
For i = 0 To UBound(Cel)
If sh.Range(Cel(i)) <> "" Then
j = 0
Else
j = 1
End If
sh.Range(Cel(i)).AddComment buf(j)
Next
Next sh
End Sub
表示されているシートの A1セル、A2セルのテキストが配列bufに登録されます。
buf(0)はA1セルのテキスト buf(1)がA2セル (サンプルの場合 buf = Array(Range("A1").Text, Range("A2").Text))
実行すると各シートのC1セルC2セルにコメントが作成されます。
If sh.Range(Cel(i)) <> "" Then でA1のコメントかA2のコメントかを振り分けています。
出力コメント、出力先セルアドレスは、共に配列になっています。
A1セルに コメント を入力 A2セルに 空白です を入力 して C1セルに 何か文字などを入れ C2を空白 (又はその逆)で
事項宇するとセルの状態に合わせたコメントが作成されます。
テストのときは、すべてのシートを外して行うかデモ用のブックでシート数を少なくして検証してくださいね。
また、作成するを聞かれていますが、削除する構文もあります
Rangeオブジェクト.AddComment を Rangeオブジェクト.ClearComments で削除できると思います。
全てのシートでコメントを削除するの場合は、
On Error Resume Next ’エラーを無視
For Each sh In Worksheets
sh.Cells.SpecialCells(xlCellTypeComments).ClearComments
Next
のような書き方になりますが、コメントのないセルに対してはエラーが返されますので On Error Resume Next が必須です。
アクティブシートのみなら
On Error Resume Next
Cells.SpecialCells(xlCellTypeComments).ClearComments
参考まで
No.4
- 回答日時:
>例えば、Sheet1 A1に入っているコメントをもとに複数コピーする。
というようなことは可能でしょうか?下記コードのコメント作成部分は、sh.Range(cel.Address).AddComment buf のみです。
変数が使われていますが、
sh シート Range(cel.Address) レンジ(セルアドレス) AddComment コメント作成 buf 文字列
コメントは、1セルに対して実行する必要があるので、複数のセルに実行する場合は、Range(cel.Address) をFor + If などで
変更するように良いかと。
Set cel = Application.InputBox(Prompt:="単一セルを選択してください。", Type:=8)
If cel Is Nothing Then Exit Sub
を消して
For Each sh In Worksheets すべてのシートをループしている中で
セルアドレスを変更します。すべてのシートと言う条件が無いのであれば、これも不要です。
例を上げますので参考にしてください。
ループと条件で書き込み実行 A列 1,3,5行目が空白でなければ実行
Sub Test()
Dim buf As String, i As Long
Dim sh As Worksheet, Cel
buf = "コメント"
For Each sh In Worksheets
For i = 1 To 5 Step 2
If Cells(i, "A") <> "" Then
sh.Cells(i, "A").AddComment buf 'Cells(i, 1)
End If
Next
Next sh
End Sub
配列で指定 A1セルA2セル
Sub Test1()
Dim buf As String, i As Long
Dim sh As Worksheet, Cel
buf = "コメント"
Cel = Array("A1", "A2")
For Each sh In Worksheets
For i = 0 To UBound(Cel)
sh.Range(Cel(i)).AddComment buf
Next
Next sh
End Sub
*全シートの場合、非表示シートがあるとエラーが返されると思います。
On Error Resume Nextなど適時対策が必要です。
No.3
- 回答日時:
何度もすみません。
いくら何でも、キャンセルでエラーが返されるのでは
叱られますね。
短い構文なので、書き換えます。
Sub Memo()
Dim sh As Object
Dim buf As String, cel As Range
buf = InputBox("メモを入力してください")
If buf = "" Then Exit Sub
On Error Resume Next
Set cel = Application.InputBox(Prompt:="単一セルを選択してください。", Type:=8)
If cel Is Nothing Then Exit Sub
For Each sh In Worksheets
sh.Range(cel.Address).AddComment buf
Next sh
End Sub
申し訳ありません。
No.2
- 回答日時:
#1です。
すみません。勘違いしてしまいました。。
マクロでも構いませんとのことなので、構文を
Sub Memo()
Dim sh As Object
Dim buf As String, cel As Range
buf = InputBox("メモを入力してください")
Set cel = Application.InputBox(Prompt:="単一セルを選択してください。", Type:=8)
For Each sh In Worksheets 'すべてのシート
sh.Range(cel.Address).AddComment buf
Next sh
End Sub
エラー処理などは、書いておりません。
VBAでは、単一のセルアドレスに対してしかコメントを挿入できないかと思いますので
2度目のInputBoxでの選択セルは、単独セルにしてください。
また、書式についてもデフォルトです。
此の辺は、不具合が出るかもしれませんが、取敢えず。
No.1
- 回答日時:
こういう事でしょうか?
Ctrlキーを押しながら、対象のシートタグを選択、対象セルを選択、を入力したいシート数行い入力します。
いかがでしょう。
また、いつも決まっているセルなら、参照式を入力しておき、(='シート名'!A1)参照元シートセルに入力すれば出来るかと思います。
例は、シート名 シートの A1セルに入力で式のあるセルに表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Visual Basic(VBA) マクロ初心者の質問です。 1.シートを開いてマクロを実行する場合、アクセスキーでAlt-L-PMとタ 2 2022/12/23 10:08
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
EXCEL 複数のシートの同一の位置にコメントを入れたい
Excel(エクセル)
-
エクセル コメントごとコピー
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
エクセルで1月0日と表示される!!
-
日付が未入力の際はゼロか、空...
-
Excelで複数シートの選択セルを...
-
エクセルで条件に一致したセル...
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
エクセルで指定のセルのみ完全...
-
excelでハイパーリンクになって...
-
エクセルで複写のように自動入...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
セルの値と同じ名前のシートを...
-
Excelでスクロールすると文字が...
-
Excelシートの保護時にデータの...
-
ファイル起動時、毎回 シート1...
-
INDIRECT(空白や()がある文字列...
-
ExcelでTODAY関数を更新させな...
-
VBAで変数に関数式の結果をセッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
エクセルで条件に一致したセル...
-
Excelシートの保護時にデータの...
-
Rangeメソッドは失敗しました。...
-
エクセルで別シートからの最大...
-
複数シートの同じセル内容を1シ...
-
エクセルで20万行あるシート...
-
エクセルで複写のように自動入...
-
エクセルの文字
-
VBAで変数に関数式の結果をセッ...
-
ExcelでTODAY関数を更新させな...
-
Excelでスクロールすると文字が...
-
エクセルで、加筆修正したセル...
-
Excelのファイル容量が減らない...
-
エクセルのルビがついたセルを...
-
シート参照で変数を使いたい(EX...
おすすめ情報
ご回答ありがとうございます。
ただの文字列を入れたいのではなく、‘ コメント’の機能で入れた文章を全てのセルに反映させたいのです。
(コメントは入れるとセルの左上に赤い三角が付くあの機能です。)
教えていただいたやり方は最初に試したのですが、複数のシートへのコメント同時挿入は出来ませんでした…
ありがとうございます!
コメントの複数入力できました!
ちなみになのですが、例えば、Sheet1 A1に入っているコメントをもとに複数コピーする。というようなことは可能でしょうか?
なぜこのようなことを聞くかというと、
コメントの内容が、外部ソフトに読み取らせる為の構文のようなものを入れる予定です。
アドインから追加した設定をもとに入力が行われているので、手入力ができないコメントなのです。
なぜこのようなことを聞くかというと、
コメントの内容が、外部ソフトに読み取らせる為の構文のようなものを入れる予定です。
アドインから追加した設定をもとに入力が行われているので、手入力ができないコメントなのです。
ご返信ありがとうございます!
例で出していただいた、配列を指定する方がやりたいことにドンピシャだったので使ってみたのですが、sh.Range(Cel(i)).AddComment buf この部分に「実行エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」と出てしまってうまく動作しませんでした。
もしかしたら私の手順が間違っているかもしれないので記しておきます。
ご指摘お願いいたします。
「A1、A2にコメントを挿入→Alt11→挿入から標準モジュール→貼り付け→F5」
特定のセルに入れたコメントをもとにコピーするのではなく、”コメント”の中の文章を入れ替えてということだったのですね。
早とちりでした。
やはり、特定のセルに入れたコメントを元にほかのシートの同じセルにコピーするのは難しいのですね...
ありがとうございました!
テスト動作、うまく動きました。
詳しい解説やご指摘で非常にわかりやすかったです。
削除の構文はこれで正しいですか?
For文が二重になってると言われたので色々試してみたのですが、うまく動かせませんでした。
~省略
For Each sh In Worksheets
For i = 0 To UBound(Cel)
If sh.Range(Cel(i)) <> "" Then
j = 0
Else
j = 1
End If
On Error Resume Next ’エラーを無視
For Each sh In Worksheets
sh.Cells.SpecialCells(xlCellTypeComments).ClearComments
Next
Next sh
End Sub