No.3ベストアンサー
- 回答日時:
こんにちは、
1点目は、実行トリガーの三つを削除した時に連動して消えるようにするのは可能でしょうか?
3点目は、ボタン実行のパターンも知りたいです
1点目は、
If Cells(r, "B") <> "" And Cells(r, "E") <> "" And Cells(r, "G") <> "" Then を
If Cells(r, "B") <> "" Then とすれば、型番と機番は、入力時、つまり空白を含め書き替えられます。
しかし、日付を消した時にすべてを消す場合は、検索キーワードになっているので、少し工夫が必要です。
日付を消したら、出力先の型番と機番を消す方法としていくつか考えられますが、
Application.Undoを使用してみます
複数の実行条件で同じ処理を行うので、重複する処理は使い廻しをします。
例
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range, r As Long, dtKey As Date
If Intersect(Target, Range("B3:G15")) Is Nothing Then Exit Sub
Application.EnableEvents = False
r = Target.Row
If Target(1).Column = 2 And Target(1).Value = "" Then
Application.Undo
dtKey = Cells(r, "B")
Range("B" & r & ":G" & r) = ""
Call FindWord(dtKey, Target.Row)
End If
If Cells(r, "B") <> "" Then
dtKey = Cells(r, "B")
Call FindWord(dtKey, Target.Row)
End If
Application.EnableEvents = True
End Sub
Sub FindWord(dtKey As Date, r As Long)
Dim myRng As Range
Set myRng = Range("M2", Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column)). _
Find(What:=dtKey, LookIn:=xlFormulas, SearchOrder:=xlByColumns)
If Not myRng Is Nothing Then
myRng.Offset(4) = Cells(r, "E").Value
myRng.Offset(5) = Cells(r, "G").Value
End If
End Sub
練る必要がありますが取り敢えず。
Application.EnableEvents = False はApplication.Undoエラーを回避する為、必須になります。
3点目は、ボタン実行のパターンも知りたいです
単純に考えると
Private Sub Worksheet_Change(ByVal Target As Range) の Target As Rangeに当てはめる値があれば良い事になるのではと
思いますが、
ボタンで実行するなら対象となるすべての範囲を対象に実行する方が簡単です。
また、ボタンから実行するなら関数式も理解しているようですので、色々遠回りせずExcelぽく
#1で示した 範囲=”関数式” 範囲.Value=範囲.Value の方が下記の様にわかり易いです。
Sub sample()
Dim col As Long
col = Cells(2, Columns.Count).End(xlToLeft).Column
Range(Cells(6, "M"), Cells(6, col)).Formula = "=IFERROR(INDEX($B$3:$H$15,MATCH(M1,$B$3:$B$15,0),4),"""")"
Range(Cells(7, "M"), Cells(7, col)).Formula = "=IFERROR(INDEX($B$3:$H$15,MATCH(M1,$B$3:$B$15,0),6),"""")"
Range(Cells(6, "M"), Cells(7, col)).Value = Range(Cells(6, "M"), Cells(7, col)).Value
End Sub
参考:少し遠回り
Private Sub Test()
Dim myRng As Range, r As Long, dtKey As Date
Dim Target As Range
Set Target = Selection(1)
If Intersect(Target, Range("B3:B15")) Is Nothing Then Exit Sub
ボタンからの処理なのに範囲が狭く、選択された日付セルを基準にしていますので
合理的な処理とは言えないと思いますが、あくまで参考です。
Qchan1962先生様、本当にありがとうございます。先生のおっしゃるように私にはボタンからの方がように分かり易いです。
ですが今回色んなパターンのコードを作って頂いたので理解して使いこなせるようにしたいと思います。
これからもお世話になることがあると思いますがよろしくお願いいたします。
No.2
- 回答日時:
#1です。
多分、動くだろうプロシージャを書く事は出来ますが、少し条件、表組みなどが
変わった場合、ご自身で改修出来ますでしょうか?
現在、関数式で問題ないようでしたらそのまま構築する方が良いのではとお節介に思います。
ご質問が >VBAでの方法があるのでしたらご教示ください。なので
サンプルを提示しますが、行っている内容などは、ご自身でメソッドなどを検索して理解してくださいね。
2行目が日付Date型になっているのなら、Findで探し、Offsetで入力できるかと思います。の方法です。
ワークシートモジュールに下記をコピペで
VBAの導入方法なども理解されている事を前提とします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range, r As Long
If Intersect(Target, Range("B3:G15")) Is Nothing Then Exit Sub
Application.EnableEvents = False
r = Target.Row
If Cells(r, "B") <> "" And Cells(r, "E") <> "" And Cells(r, "G") <> "" Then
Set myRng = Range("M2", Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column)). _
Find(What:=Cells(r, "B"), LookIn:=xlFormulas, SearchOrder:=xlByColumns)
End If
If Not myRng Is Nothing Then
myRng.Offset(4) = Cells(r, "E").Value
myRng.Offset(5) = Cells(r, "G").Value
End If
Application.EnableEvents = True
End Sub
M2行からの横の日付を検索対象にしていますので、このセルは 2020/9/5のように入力されていて
書式設定でdにして表示1,,,4,5の様になっています。>1行目が月、2行目が日、3行目が曜日で3つとも年月日で入れております。
列方向のセル結合がある為、SearchOrder:=xlByColumns
実行トリガーはB3:G15ですが、同じ行の3つ共に値が入っている時に実行されます。
逆に言うと3つとも値がある状態でいずれかを変更すると対象セルに値が入ってしまいます。ご入力の可能性があります。
ご入力を一旦止めてキャンセルできるようにするか、トリガーを狭め条件を厳しくするか、または、入力実行後
トリガーのセルの値をクリアーするなど更に工夫が必要と思います。
(入力セルは一行で良い様な気がします。入力実行後下に蓄積させるなどで)
Application.EnableEvents = Falseは、イベント発生を止めるコマンドです。
Application.EnableEvents = Trueを実行せずにVBAを終了すると次回イベントが発生しませんので
検証時は、'Application.EnableEvents = False などとして無効にしてください。
Qchan1962様、ありがとうございます。やりたいことができました。3点聞きたいことがあります。1点目は、実行トリガーの三つを削除した時に連動して消えるようにするのは可能でしょうか?2点目は、今後横展開を考えており、列方向のセル結合がない(現状1日2列ですが1日1列とした時のこと)ときはSearchOrder:=xlByColumnsの式は不要ということでしょうか?>列方向のセル結合がある為、SearchOrder:=xlByColumns 3点目は、ボタン実行のパターンも知りたいです。標準モジュールに移し
Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range, r As Long
If Intersect(Target, Range("B3:G15")) Is Nothing Then Exit Sub
' Application.EnableEvents = False
r = Target.Row
If Cells(r, "B") <> "" And Cells(r, "E") <> "" And Cells(r, "G") <> "" Then
Set myRng = Range("M2", Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column)). _
Find(What:=Cells(r, "B"), LookIn:=xlFormulas, SearchOrder:=xlByColumns)
End If
If Not myRng Is Nothing Then
myRng.Offset(4) = Cells(r, "E").Value
myRng.Offset(5) = Cells(r, "G").Value
End If
' Application.EnableEvents = True
End Sub
でボタンと紐づけれるか試みたのですがだめでした。
週末の貴重な時間を私の我儘にお付き合い下さりありがとうございます。
No.1
- 回答日時:
こんにちは、
ご質問の場合、関数式とVBAの大きく違うところは、いつ実行するかと言うところです。
関数は、数式の参照セルに入力された時に解が求められますが、VBAはそのトリガーを
どうするかを、仕様に含める必要があります。
例えば、G:Hセル(A:H)に入力された時に実行するとか、まとめてボタンから実行するとかです。
前者は、シートのイベントを使いますが、後者は、ボタンにプログラムを登録します。
また、入力されているINDEX,MATCH関数を補足で示されると良いと思います。
右表のセルが日付Date型になっているか等もわかるので、、
自動記録でいくつか作って手を加える方法も考えられますが、結合セルが少し気になります。
2行目が日付Date型になっているのなら、Findで探し、Offsetで入力できるかと思います。
また、VBAで 入力したい範囲に=”INDEX,MATCH関数” .Value=.Value なんて方法もあると思います。
参考:https://kokodane.com/mini_macro29.htm
こんばんは、御回答ありがとうございます。助言通りに補足をさせていただきました。参考のサイトもみせてもらいましたが、自分にはうまく組めなくて途方にくれています。
後、ラインの日付、1行目が月、2行目が日、3行目が曜日で3つとも年月日で入れております。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Excel(エクセル) ExcelVBAの、Index matchについて 2 2023/04/18 16:57
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
VBA 別シートの同じ日付の欄に値を貼付け
Excel(エクセル)
-
excel vbaで日付一致の行にデータ転記
Excel(エクセル)
-
-
4
(VBAにて)日付でデータを抽出するやり方
Excel(エクセル)
-
5
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
6
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
7
指定したセルと同じ日付の入ったセルを選択するVBA
その他(Microsoft Office)
-
8
本日の日付とマッチした列の値を抽出
Excel(エクセル)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
VBAで文字列を数値に変換したい
Excel(エクセル)
-
11
別のシートから値を取得するとき
Visual Basic(VBA)
-
12
今日の日付が入った行のデータを取得するマクロ
Excel(エクセル)
-
13
vba 指定した日付範囲でセルの色を塗る
Visual Basic(VBA)
-
14
Excelのマクロでボタンを押すと数が1足されるようにするには?
IT・エンジニアリング
-
15
Excelで日付変更ごとに、自動的にデータを転記
Excel(エクセル)
-
16
エクセルVBA 4行飛ばしで転記するループ処理
Excel(エクセル)
-
17
データが入力されている隣のセルに当日日付と時刻を入力するExcel VBAプログラム
Visual Basic(VBA)
-
18
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
19
VBA 別ブック(シート)の同一日付のデータ欄に値をコピー
Visual Basic(VBA)
-
20
指定した日付の範囲内でデータを転記したい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA Application.Matchについて...
-
VBAのエラー表示の対処法について
-
VBA 別ブックからコピペしたい...
-
VBAで特定の文字が入った行をコ...
-
Excel マクロについて詳しい方...
-
【VBA】値を変更しながら連続で...
-
[VB.net] ボタン(Flat)のEnable...
-
配列のペースト出力結果の書式...
-
VBAでセルの書式を変えずに文字...
-
VBA 別ブックから条件に合うも...
-
エクセルでCDOを使ったメール送...
-
ExcelVBA シート名を複数セルか...
-
VBAのループ処理について教えて...
-
【VBA】 結合セルに複数画像と...
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
VBA 2次元配列の出力
-
【VBA】スペースが入っていない...
-
Excel VBA 選択範囲の罫線色の...
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】5万行以上のデー...
-
【ExcelVBA】dictionaryの重複...
-
VBAでセルの書式を変えずに文字...
-
[Excel VBA]特定の条件で文字を...
-
【VBA】 結合セルに複数画像と...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAのブックを開く方法...
-
WindowsのOutlook を VBA から...
-
エクセルでCDOを使ったメール送...
-
エクセルvbaの対象セルに色をつ...
-
【ExcelVBA】インデックスが有...
-
Excelのマクロについて教えてく...
-
エクセルVBAで特定のセルの値を...
-
エクセルのVBAコードについて教...
-
【VBA】値を変更しながら連続で...
-
Outlookの「受信日時」「件名」...
-
VBA 2次元配列の出力
-
Excel 範囲指定スクショについ...
-
VBA 別ブックから条件に合うも...
-
Web画面の文字をVB6で取得したい
おすすめ情報
S6に入ってるのが=IFERROR(INDEX($B$3:$H$15,MATCH(S$1,$B$3:$B$15,0),4),"")
S7に入ってるのが=IFERROR(INDEX($B$3:$H$15,MATCH(S$1,$B$3:$B$15,0),6),"")
トリガーですが、入力された時に実行できるのはとてもありがたいです
現在使っているINDEX,MATCH関数の表示をVBAでセルに関数を出さずにできる方法を模索しております。よろしくお願いします。助けてください。
追加質問2点目の1日2列から1日1列にしたいときのことを聞きましたがQchan1962様の組んでくれたプログラムをはめてみたら使えました。試さず質問し申し訳ありません。