No.1
- 回答日時:
少しややこしい内容のサブルーチンのようです。
人の好き好きたらか、書き方は、なんとも言いようがありませんが、
F5:AJ5 の間で、文字列src と一致しているセルがあれば、そのセルを格納せよ、という意味です。
ちなみに、ByValは、値渡し、ByRef は、参照渡し。参照渡しで、セルのオブジェクトを確保しています。
Private Sub MyFind(ByVal src As String, ByRef rng As Range)
Dim r As Range
Set rng = Nothing
For Each r In Range("F5:AJ5")
If r.Text = src Then
Set rng = r
Exit Sub
End If
Next
End Sub
例えば、実行ファイルでは、見つけたら、その文字列の先頭に、「!」をつけるようにメインコードを作ってみました。
Sub Test1()
Dim rng As Range
Dim src As String
src = "abc"
MyFind src, rng
rng.Value = "!" & rng.Value
End Sub
WindFaller様
ありがとうごさいました
そして、大変失礼し、大変申し訳ありません
先日、質問した回答者様とコンタクトを取りたくて、再度、質問をしてしまいました
懇切丁寧なご回答で、質問内容は理解できました
No.2
- 回答日時:
前回の回答者です。
(Private Sub MyFindの作者です)前回の質問は、下記URLです。
https://oshiete.goo.ne.jp/qa/10741686.html
(質問者へお願いです。今後このような質問をするときは、前回のURLも提示するようにするようにしてください。そうすると他の回答者も
前後関係が判るので回答しやすくなります)
本来のソースの問題の箇所は、
Set org = Range("F5:AJ5").Find( _
What:=c.Value, LookAt:=xlWhole)
Set dst = Range("F5:AJ5").Find( _
What:=c.Offset(0, 1).Value, LookAt:=xlWhole)
となっています。
要はここで何をしているかというと、
①c.valueにマッチするセルをF5:AJ5の範囲で検索し、そのセル位置をorgにセットする。
②cの右隣のvalueにマッチするセルをF5:AJ5の範囲で検索し、そのセル位置をdstにセットする。
ということをやっています。
これと同じことをMyFindで行っています。
但しc.valueで検索するのではなく、c.textで検索するのが重要な点です。
c.valueとc.textの違いは、c.valueが内部データを示すのに対し、c.textは表示されているままのデータを示します。
今回は、2018/9/1 6:00のようなデータが設定されますが、c.valueは43344.25の数値です。c.textは"2018/9/1 6:00"の文字列です。
c.valueで検索すると00:00:00のデータで検索が失敗します。その為、c.textで検索するようにしています。
何故、00:00:00の場合のみ失敗するのは判りません。(調査していません)
その為、わざわざ、失敗する方法をとるよりは、確実に成功する方法をとったのが、MyFindによる検索になります。
MyFindの呼び出しは、
Call MyFind(c.Text, org)
Call MyFind(c.Offset(0, 1).Text, dst)
で行っています。
①c.Textを指定して、マッチするするセルを検索し、そのセル位置をorgにセットする。
②cの右隣のTextにマッチするセルを検索し、そのセル位置をdstにセットする。
ということを行います。
検索範囲は、F5:AJ5であることが、今回決まり切っているので、MyFindの中でその範囲を検索するようにしています。
(パラメータで与えても構いませんが、今回はMyFindの内部で範囲を決め打ちしています。
このMyFind自体が汎用的なプロシージャではないので、これで必要十分かと)
このプロシージャの機能の説明は、No1のかたが説明されているので、まさにその通りとしか言いようがありません。
Private Sub MyFind(ByVal src As String, ByRef rng As Range)
srcがc.Textで渡された文字列になります。入力のみなので、ByValと記述します。
rngが検索して見つかったセルになります。これは、そのセルを返すので、ByRefと記述します。
見つからなければ、nothhingを返します。
If r.Text = src Then
でsrcと比較しているのはセルのTextであることに注意してください。(If r.Value = src Thenではありません)
不明点があれば補足ください。
No.3
- 回答日時:
>前回の回答内容では、実際、マクロが実行できないため、どこが原因か、マクロ内容を理解したく再度の質問となりました
「実際、マクロが実行できないため」とはどのようなことでしょうか。
前回の質問のように、実行すると、エラーが発生するということでしょうか。
そうであれば、どのようなデータの場合にエラーが発生するのでしょうか。
また、エラー発生時のソースの箇所も同じでしょうか。(デバッグをクリックした時、黄色で表示される行です)
No.4
- 回答日時:
If c.Value <> "" Then・・・・①
Call MyFind(c.Text, org)・・・・②
Call MyFind(c.Offset(0, 1).Text, dst)・・・③
その状態で、
②のorgの箇所、
③のdstの箇所
にマウスをあててください。
どちらかがnothingになります。
nothingになったほうの検索がエラーになっています。
orgがなると、開始時間でエラーです。
dstがなると、終了時間でエラーです。
また、①のc.Valueにマウスを当ててください。
それがD列の開始時間です。
1.①のc.Valueの内容
2.その横のE列の内容(終了時間)
3.②のorgの値
4.③のdstの値
を提示してください。
No.6
- 回答日時:
こちらで確認したところ、正常に引けています。
(添付図参照)念の為確認です。
①D列の2018/09/25 06:00 はきちんと表示されているか。
②E列の2018/09/26 17:45 はきちんと表示されているか。
③開始時間2018/09/25 06:00はF5:AJ5内にきちんと表示されているか。
④終了時間2018/09/26 17:45は③より右側でかつF5:AJ5内にきちんと表示されているか。
を確認してください。
特にF5:AJ5内の時間が、########のようになっていませんでしょうか。(添付図の赤線で囲んだところ)
私が提示した検索方法は、みたままの状態での検索です。見た目が多少でも違っているとエラーになります。
No.7
- 回答日時:
F5:AJ5内の時間が、########のようになっていても、あなたが最初に提示されたマクロでは正常に動作します。
########表示の幅が狭いときに発生します。
もし、どうしても########の表示になってしまう箇所が発生するなら、私が提示したマクロは使えません。
あなたが最初に提示されたマクロを使用したほうが良いでしょう。
但し、その場合、00:00:00の時間が正しく検索できない為、エラーになります。
これを解消する為に、姑息な手段ですが、
2018/9/25/ 00:00:01のように秒のところを00でなく01にします。F5:AJ5内も同様にします。
すると、表示上は2018/9/25/ 00:00なので問題ありません。(添付図の赤線で囲んだところ)
これで、あなたが最初に提示されたマクロを実行すると正常に描画できます。
時刻が00:00:00の場合のみ、00:00:01にして登録する方法も1つの解決方法かと。
No.8
- 回答日時:
>実は、ガンチャート表の範囲を大きくしたため現在のマクロは、以下となります
>申し遅れました、失礼しました
>https://ideone.com/wF8Bej
このマクロをこちらで試してみました。
問題なく動作しています。
>時刻の欄では、最初、o列の開始時刻を入力すると、p列の終了時刻は計算式で設定しています
>そして、o列の日付が変わった欄(行下)も計算式で設定されており、連続で日時が変わる設定となっております
>入力した日時は、正常に表示されています
入力した日時に対応するR5:BZE5の範囲の日時も正常に表示されていますでしょうか。
R5:BZE5の範囲の日時が#####のように表示されているか、その列が非表示になっていませんか。
非表示でもエラーになります。
No.9ベストアンサー
- 回答日時:
No8は無視してください。
https://ideone.com/wF8Bejを
こちらでを変えました。
https://ideone.com/7lDjiU
にアップしています。
Textでの比較はいろいろと弊害がありそうなので、Valueの比較に変えています。
この方法なら#####の表示箇所も、非表示の箇所も、00:00:00の箇所も問題なく検索できます。(こちらで試した限りではですが)
Tatsu99様
見事に、マクロは実行できました
本当に、ありがとうございました
数々の無礼をいたしまして、申し訳あらません
今後も、VBAの知識習得に邁進していきます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBA 1 2023/04/27 13:37
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excel内での検索結果をシート...
-
セルがクリックされた回数をカ...
-
VBA 見つからなかった時の処理
-
【マクロ】ファイル名の変更に...
-
Excel2007 色のカウント (VBA)
-
小数点以下の文字だけ書式を変...
-
Excelで、図形内の文字をセルに...
-
フォントの色を指定して削除出...
-
セルの値が変ると自動でマクロ...
-
太字に設定されているセルの個...
-
エクセルでセルをダブルクリッ...
-
Excelでセルをクリックす...
-
開始行と最終行を指定して差し...
-
エクセルでページ数をあるセル...
-
エクセルで小文字を大文字に・・・
-
セル背景や文字を点滅させる方法
-
excelのソルバーをVBAで複数行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
VBA 見つからなかった時の処理
-
エクセルでの検索ボックスの作...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
【EXCEL】先週の月曜日の日付を...
-
EXCELのセルや文字色の反映
-
セルがクリックされた回数をカ...
おすすめ情報
Tatsu99様
ありがとうございます
この度の質問方法で、お気を悪くさせまして、大変申し訳ありません
大変恐縮ではありますが、再度質問させてもらいました
前回の回答内容では、実際、マクロが実行できないため、どこが原因か、マクロ内容を理解したく再度の質問となりました
Tatsu99様
夜分に、大変恐縮します
マクロは、矢印を引くコードの所で止まっているようです
デバックは以下のコードの所に印があります
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
c.Top + 7, dst.Left + 0, c.Top + 7).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(0, 0, 128)
.Weight = 3
End With
Tatsu99様
夜分に、大変恐縮します
マクロは、矢印を引くコードの所で止まっているようです
デバックは以下のコードの所に印があります
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
c.Top + 7, dst.Left + 0, c.Top + 7).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(0, 0, 128)
.Weight = 3
End With
Tatsu99様
返信遅くなり、申し訳ありません
寝落ちてました
以下を提示します
1.①のc.Valueの内容 : 2018/09/25 06:00
2.その横のE列の内容(終了時間) : 2018/09/26 17:45
3.②のorgの値 ; nothing
4.③のdstの値 : nothing
Tatsu99様
orgとdstの所にマウスをあてると、nothingになります
c.textの所では、2018/09/25 6:00
c.offset(0, 1)の所では、2018/09/26 17:45
になります
Tatsu99様
すみません、又、補足します
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
c.Top + 7, dst.Left + 0, c.Top + 7).Line
上記のorg.Leftの所では、(オブジェクト変数またはwith ブロックが設定されていません)と表示されます
Tatsu99様
実は、ガンチャート表の範囲を大きくしたため現在のマクロは、以下となります
申し遅れました、失礼しました
https://ideone.com/wF8Bej
内容的には、送信しましたマクロと変わりなく、
矢印を選択的に色を変えるマクロを追加しております
時刻の欄では、最初、o列の開始時刻を入力すると、p列の終了時刻は計算式で設定しています
そして、o列の日付が変わった欄(行下)も計算式で設定されており、連続で日時が変わる設定となっております
入力した日時は、正常に表示されています