
今日初めて知ったのですが「セルに識別用ラベルを設定する」IDプロパティというのがあるようです。ただVBEの「ヘルプ」を見ただけでは「Web ページとして保存し、HTML 行を Web ページに追加」するもののようで、Web ページ保存になど縁のないわたしにはさっぱりわかりません。でも、面白そうなので試してみると、
Sub ID_Wt()
ActiveSheet.Range("V10").ID = "ABC"
End Sub
で、セルV10に"ABC"が設定され、
Sub ID_Rd()
MsgBox ActiveSheet.Range("V10").ID
End Sub
で、読むことができました。
◎ IDはセルのどこに保存されたのでしょうか?セルのどこを見ても見当たりませんし、そのセルはそれまでのUsedRange外に設定した場合でもUsedRangeは拡張されまれません。とても不思議です。
◎ VBA以外の方法でIDを読むことは出来るのでしょうか?
◎ 一旦終了すると設定したIDは消えてしまうようですがそういうものなのでしょうか?
No.2ベストアンサー
- 回答日時:
こんにちわ
#1さんのご回答に共感するところも多いので、出てこないつもりでしたが、
今回話題の ID プロパティを持ち出したのは私なので、少しだけ。
私が ID プロパティを使うようになったのは、
ここOKWaveで何度か紹介されたのがキッカケだったと記憶しています。
その時も、プロパーな技術情報には触れられていなかったし、
私も今回ご質問の点に興味を持って調べたことは今までありませんでした。
「エラーやユーザー操作などでプロジェクトが中断しても」
「失われない」
「バッファを」
「簡易的に実現する方法」
という、目的、用途、に主眼を置いて紹介されたものだったと思います。
「カスタムな設定を変更したら」
「必ず」
「元に戻す」
などの目的において、
Staticな変数(PublicやPrivate)では、
プロジェクトの中断によって情報が失なわれるし、
テンポラリなファイルに書き込んでを保存するのは、
管理面で色々な工夫が必要になって大がかりです。
他にも幾つか方法はあるけれど、
「エラーによる中断で失なわれず」
「ブックを閉じたら残らない」
(且つ、見かけ上ブック、シート、セルを変更しない)
という意味では、最もコンパクトに目的を実現するもの、
という理由で、あくまで「簡易的に」用いたりします。
私が No4900090 に書いたソースでは、コメント表示設定を変更する必要
(それ以外で書くと必要以上に記述が長くなるので)があり、
また、実験が目的のソースですから、ユーザーによる書き換えなどによって
エラーが起こる場面が容易に想像できるので、
元々の設定が損なわれない方法を加える必要を感じたのでした。
ただ、書き方がちょっと不十分で、本来は、
If Cells(1).ID <> "" Then Cells(1).ID = prop
↓
prop変更
↓
処理
↓
prop = Cells(1).ID
↓
Cells(1).ID = ""
のようにしないと、目的通りに機能しないので、
この点、誤解を与えたかな?
上述の目的以外の用途では、まったく興味を持ったことがないので、
(相当数のテスト実験を重ねてきたものの)お訊ねの件に関して
確かなことは何も言えません。
どんな用途を想定してのご質問なのかな、とも思うのですが、
答にならなくてすみません。
行儀よいソースにしようとした結果が
お行儀悪かったですね。
cj_moverさま、いつもいつもありがとうございます。
「エラーによる中断で失なわれず」
「ブックを閉じたら残らない」
(且つ、見かけ上ブック、シート、セルを変更しない)
前回の質問で、求める回答に加えて、上記のすばらしい方法をご伝授いただき、とても感謝いたしております。
前回のお礼の際、質問しようかなと思ったのですが、今回あらためて質問をたてさせていただきました。
今後ともご指導お願い申し上げます。
No.3
- 回答日時:
間違えましたm(_)m
If Cells(1).ID = "" Then Cells(1).ID = prop
です。
んー、最悪かも
No.1
- 回答日時:
私も意識するのは初めてです。
ツールバーアイコンのIDやヘルプコンテキストIDなどは目にしますが。
過去のWEBに
http://www.moug.net/faq/viewtopic.php?t=35708 の後半
が唯一言及がありますね。さすがMoug。
Sub test01()
Worksheets("Sheet1").Range("D5").ID = "A"
Worksheets("Sheet1").Range("C3").ID = "A"
MsgBox Range("D5").ID
For Each rng In Range("A1:D10")
If rng.ID = "A" Then
MsgBox rng.Address
End If
Next
End Sub
をやってみても動きました。Rangeのプロパティにある。
rangeのプロパティはたくさんあります
(1)値
(2)数式
(3)コメント
(4)書式
(5)入力規則
参考 「形式を選択して貼り付け」の「貼り付け」の中の一部
そのセルのプロパティの中に
IDが有ると思いますが、途中のバージョン(2002?)から出来たのではないかと思います。
でも「形式を選択して貼り付け」のメニューにもないところから、余り公になってないのかも。
ーー
用途はセルの区別(識別レッテル貼り、しおり)に使えるということではないでしょうか。
値はその都度変わるわけですが、あるとき識別としてIDをつけると値とは連動しない識別として使える用途があると思います。
ーー
ただし、FindメソッドでLoolInでxlIDなどやってみたが、上記VBAコードのようには「A」を入れた番地を返しませんでした。そもそも不可。
ーー
WEB(HTML)との関連で使われるのが主なのか、これが使われるのはなぜかは不勉強です。
ーーー
> IDはセルのどこに保存されたのでしょうか
私のよそうですがセルのプロパティは、画像のレイヤーのように
重畳的になっていて、独立しているイメージ(各々独立して別々)で、実行中はメモリ上に情報をもたれているのではないでしょうか。
値用 A1:IV65536に対応する連続エリア
数式用 A1:IV65536に対応する連続エリア
・・
しかし利用されないセルの分のメモリーがもったいないので、技術的に工夫されていると思う。増えたときにメモリに増やすなどの工夫も有ると思う。2007になればなおさらか?
特にセル範囲で設定されるものが多いもの(書式、数式)は、各セルに同じ情報を持つのはもったいない。IDがどうなっているかは、エクセルのインサイド情報ですから判りません。
>一旦終了すると設定したIDは消えてしまうようですがそういうものなのでしょうか
ファイル保存時には保存フォーマットにこの項目がなく、メモリに有るID情報は、捨てられるのかも知れません。
>UsedRangeは拡張されまれません
Usedrangeを広げるきっかけとなる材料にIDは含めてないのでしょう。
「値」の設定の拡がりだけ重視しているようなこともないとはいえないが、書式の設定(ほか上記5プロパティ)でもUsedrangeは増えるものと思います。
全てマイクロオフとのエクセル処理の詳細がわからないと、いえないことです。私は長年の素人としての使用経験からイメージしてます。
その程度のものとして読んでください。私はエクセル全般において、発展は望めないのですが、質問者自身が、アンテナを張って勉強されんことを祈ります。
この回答への補足
テストした結果
値貼り付けでもIDが張り付くことを確認しました。
Sub test02()
With Worksheets("Sheet1")
For Each rng In Range("A1:D20")
rng.ID = ""
Next
.Range("D5").ID = "A"
.Range("C3").ID = "A"
.Range("A1:D10").Copy
.Range("A11:D20").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
For Each rng In .Range("A1:D20")
If rng.ID = "A" Then
MsgBox rng.Address
End If
Next
End With
End Sub
imogasiさま、長いご経験をふまえたご丁寧な回答、まことにありがとうございます。
大変勉強になりました。
感謝申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba テキストボックスとリフト...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
エクセル オートフィルタで絞...
-
(Excel)数字記入セルの数値の後...
-
Excelでのコメント表示位置
-
セルをクリック⇒そのセルに入力...
-
エクセルのセルの枠を超えて文...
-
対象セル内(複数)が埋まった...
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
EXCELのセルの中の半角カンマの...
-
Excel 例A(1+9) のように番地の...
-
Excel2003 の『コメント』の編...
-
EXCEL VBA セルに既に入...
-
Excelで数式内の文字色を一部だ...
-
エクセルの書式設定の表示形式...
-
数式を残したまま、別のセルに...
-
エクセル セルの中に縦線が入っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
スプレッドシートで複数のプル...
-
excelで日付関数の文字列変換の...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセルの一つのセルに複数の...
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
エクセルの書式設定の表示形式...
-
EXCEL VBA セルに既に入...
-
excelの特定のセルの隣のセル指...
-
エクセルのセルの枠を超えて文...
-
Excelでのコメント表示位置
-
エクセル オートフィルタで絞...
-
Excelで数式内の文字色を一部だ...
おすすめ情報