Excel (VBA) |
![]() ![]() |
投稿日時: 22/01/02 02:43:41
投稿者: まさ@まさ
|
---|---|
お世話になっています。
|
![]() |
投稿日時: 22/01/02 09:40:16
投稿者: WinArrow
|
---|---|
>ブルックアプップ
|
![]() |
投稿日時: 22/01/02 11:35:54
投稿者: WinArrow
|
---|---|
数式の入っているセルに書式を設定したいということと思いますが、
|
![]() |
投稿日時: 22/01/02 14:01:49
投稿者: まさ@まさ
|
---|---|
お世話になっております。
A BC D E F G H I J 3 年月日 検索値 表示1 表示2 表示3 表示4 表示5 4 経済 日本 円安が進行中 田中 5 6 シート2 A:C DEF G:AA AB:AC 32 表示2 表示3 表示4 表示5 33 経済 日本 円安が進行中 田中 シート1で塗りつぶしや文字色変更、太字をそのまま反映させたいのです。 検索値が変更されると自動で変更が理想ですが 関数では書式まで反映させる事は不可、また、条件付き書式でも 特定の文字や値ではないので不可と考えております |
![]() |
投稿日時: 22/01/02 15:18:50
投稿者: simple
|
---|---|
【検索について】
|
![]() |
投稿日時: 22/01/02 16:18:18
投稿者: まさ@まさ
|
---|---|
お世話になっております。
|
![]() |
投稿日時: 22/01/02 18:06:53
投稿者: WinArrow
|
---|---|
書式の複写について
|
![]() |
投稿日時: 22/01/02 21:46:02
投稿者: simple
|
---|---|
1.データをVLOOKUPで引っ張って来ているなら、
|
![]() |
投稿日時: 22/01/04 14:22:11
投稿者: めんたん
|
---|---|
すでに書かれていますが、マクロでやるならVLOOKUP関数は忘れてFindメソッドで検索、コピペの流れが楽ではないですか?
|
![]() |
投稿日時: 22/01/04 17:13:50
投稿者: まさ@まさ
|
---|---|
お世話になっております。
ABCDE 1 昼勤 2 1A BCDEF GHIJ KLMN OP 2 2022年 1月 4日 =DATE(C6,H6,L6) 3 A・・・・・・・・・・・AC 10=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO10,シート3!$F$4:$H$3000,3,FALSE),"") 11↑ ・↑ ・↑ ・↑ 23↑ ABCDEFG 24=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO24,シート3!$F$4:$I$3000,4,FALSE),"") HIJKL 24=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO25,シート3!$F$4:$J$3000,5,FALSE),"") A・・・・AC 28=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO28,シート5!$F$4:$I$3000,3,FALSE),"") AB(2セル毎に結合されているABまで) 30=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BS10,シート5!$F$4:$I$3000,3,FALSE),"") ABC 33=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO33,シート1!$F$4:$K$3000,シート1!H$2,FALSE),"") 34 ・ ・ 70 DEF 33=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO34,シート1!$F$4:$K$3000,シート1!I$2,FALSE),"") 34 ・ 70 G:AA 33=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO33,シート1!$F$4:$K$3000,シート1!J$2,FALSE),"") 34 ・ 70 AB:AC 33=IFERROR(VLOOKUP($B$5&$G$5&$K$5&$A$1&BO33,シート1!$F$4:$K$3000,シート1!K$2,FALSE),"") 34 ・ 70 上記とほぼ同じだが載せておきます(下記) AD:AG 1夜勤 2 AE:AI AJ:AM AN:AQ AR:AS 5 2022年 1月 5日 =DATE(AE5,AJ5,AN5) AD:BFまで上記とほぼ同じ数式 上記数式に出てくるBO、BP等の数式 BO10:BO25==IFERROR(INDEX(シート3!D:D,1/LARGE(INDEX((シート3!E:E=シート2!$K$5&A1)/ROW(シート3!C:C),0),ROW(シート3!C1))),"") BP10:BP25==IFERROR(INDEX(シート3!D:D,1/LARGE(INDEX((シート3!E:E=シート2!$AN$5&AD1)/ROW(シート3!C:C),0),ROW(シート3!C1))),"") BO24==IFERROR(INDEX(シート3!D:D,1/LARGE(INDEX((シート3!C:C=シート2!$K$5)/ROW(シート3!I:I),0),ROW(シート3!I1))),"") BO25==IFERROR(INDEX(シート3!D:D,1/LARGE(INDEX((シート3!C:C=シート2!$K$5)/ROW(シート3!J:J),0),ROW(シート3!J1))),"") BO28==IFERROR(INDEX(シート4!D:D,1/LARGE(INDEX((シート4!E:E=シート2!$K$5&A1)/ROW(シート4!H:H),0),ROW(シート4!C1))),"") BO33:BO70==IFERROR(INDEX(シート1!$E:$E,1/LARGE(INDEX((シート1!$D$4:$D$3000=シート2!$K$5&$A$1)/ROW(シート1!$C$4:$C$3000),0),ROW(シート1!C1))),"") BP33:BP70==IFERROR(INDEX(シート1!$E:$E,1/LARGE(INDEX((シート1!$D$4:$D$3000=シート2!$AN$5&$AD$1)/ROW(シート1!$C$4:$C$3000),0),ROW(シート1!C1))),"") BS10:BS23==IFERROR(INDEX(シート5!D:D,1/LARGE(INDEX((シート5!E:E=シート2!$K$5&A1)/ROW(シート5!H:H),0),ROW(シート5!C1))),"") 漏れあるかもしれませんがシート2はこんな感じです シート1 A B C D E F G H I J K L 3年 月 日 検索値 検索値 シフト 表題 対象 内容 記載者 確認者 4 5 6 D=C5&G5 F=A5&B5&C5&G5&E5 =連番 シート3 A:Gまでは同じ H I J K 3 内容 教育 教育 記載者 シート4 A:Gまでは同じ H I J 3 対象者 内容 記載者 シート5はシート4と同じ シート2のフォームは固定で シート1・3・4・5は特にこだわりはありません。 わかりにくいとは思いますがよろしくお願いします |
![]() |
投稿日時: 22/01/04 18:15:23
投稿者: めんたん
|
---|---|
コードの中身が分からないということで、Findメソッドの使い方を以下に。
シート1 A B ・・・ F G 1 検索値 表示したい内容1 表示したい内容2 表示したい内容3 2 果物 りんご 赤 100円 3 野菜 キャベツ 緑 200円 4 魚 鯛 赤 300円 5 肉 牛 赤 400円 シート2 A B C D 1 検索値 結果1 結果2 結果3 2 魚 3 野菜 Sub 検索する() For Each r In Sheets("シート2").Range("A2:A3") 'シート2のA2:A3に検索値が入ってる '完全一致で検索 Set f = Sheets("シート1").Columns("A").Find(What:=r.Value, _ LookIn:=xlValues, LookAt:=xlWhole) If Not f Is Nothing Then '検索値がヒットしたら f.Offset(, 1).Copy r.Offset(, 1) 'シート1のB列をコピペ f.Offset(, 5).Resize(1, 2).Copy r.Offset(, 2) 'シート1のF:G列をコピペ End If Next End Sub コード実行結果 シート2 A B C D 1 検索値 結果1 結果2 結果3 2 魚 鯛 赤 300円 3 野菜 キャベツ 緑 200円 |
![]() |
投稿日時: 22/01/04 18:52:33
投稿者: まさ@まさ
|
---|---|
ありがとうございます
|
![]() |
投稿日時: 22/01/04 20:33:17
投稿者: WinArrow
|
---|---|
>結果の表示先を指定する方法はありますでしょうか?
|
![]() |
投稿日時: 22/01/04 20:59:01
投稿者: まさ@まさ
|
---|---|
お世話になっております。
|
![]() |
投稿日時: 22/01/04 23:37:09
投稿者: WinArrow
|
---|---|
引用: 簡単・・・個人差があります。 マクロの記録でコードを作成してみたら、いかがでしょう。 |
![]() |
投稿日時: 22/01/05 00:11:30
投稿者: simple
|
---|---|
【モデル例】
A B:C D:E F:H I J K L M 1 a a1 a2 a3 2 b b1 b2 b3 3 c c1 c2 c3 4 d d1 d2 d3 5 6 a a1 a2 a3 7 c c1 c2 c3 8 b b1 b2 b3 9 d d1 d2 d3 ・B6 には =VLOOKUP($A6,$J$1:$M$4,2,FALSE) が入っているものとします。 他のセルも同様です。 ・また、K1:M4 の各セルには文字色、背景色、太字などの書式が施されているものとします。 ただし、文字ごとに異なる書式は使っていないものとします。 (その場合は別途の対応が必要です。確認に対して回答がなかったので不明です。) 【書式をコピーするコード例】 Sub test() Dim k&, j& For k = 6 To 9 Call getFormat(Cells(k, 2), Cells(k, "A"), Range("J1:J4"), 2) Call getFormat(Cells(k, 4), Cells(k, "A"), Range("J1:J4"), 3) Call getFormat(Cells(k, 6), Cells(k, "A"), Range("J1:J4"), 4) Next End Sub Function getFormat(targetR As Range, s As String, searchR As Range, col As Long) Dim m As Long Dim rng As Range m = Application.Match(s, searchR, 0) Set rng = searchR.Cells(m, col) 'コピー元のセル範囲 '結合セルに値貼り付け Set targetR = targetR.MergeArea targetR.UnMerge 'いったん結合を解除 rng.Copy targetR(1).PasteSpecial Paste:=xlPasteFormats '書式貼り付け targetR.Merge '再結合 End Function (一応の動作を確認してあります) 以上が骨子となる技術だと思います。 実例に即していえば、 たとえば、シート2のA33:C33の結合セルに対する処理であれば、 上記のFunctionプロシージャを使って、以下のように書けます。 細かいところは検証していません。(そちらで検証して、必要なら修正してください。) s = [B5] & [G5] & [k5] & [A1] & Cells(k, "BO") Call getFormat(Cells(33, "A"), _ s, _ Worksheets("Sheet1").Cells(4, "F").Resize(3000, 1), _ Worksheets("Sheet1").Cells(2, "H")) 一部修正: 引数には、結合セルの最左最上の単一セルを渡し、 プロシージャ側でMergeAreaに拡大することとしました。 こちらのほうがコード作成の負荷が少し省けるかもしれません。 |
![]() |
投稿日時: 22/01/05 08:53:33
投稿者: めんたん
|
---|---|
>結果の表示先を指定する方法はありますでしょうか?
簡単な貼り付けの例 Range("A1").Copy 'A1をコピー Range("A2").PasteSpecial xlAll 'A2に貼り付け Range("A1").Copy 'A1をコピー Range("A1").Offset(1, 0).PasteSpecial 'A2に貼り付け Range("A1").Copy 'A1をコピー Range("A1").Offset(1, 1).PasteSpecial 'B2に貼り付け Range("A1").Copy 'A1をコピー Range("A1").Offset(1, 1).Resize(1, 2).PasteSpecial 'B2:C2に貼り付け Range("A1").Copy 'A1をコピー Range("C" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial '実行するたびC列の最後尾+1に貼り付け Range("A1").Copy 'A1をコピー Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial '実行するたび1行目の最右列+1に貼り付け Application.CutCopyMode = False |
![]() |
投稿日時: 22/01/05 11:16:21
投稿者: Suzu
|
---|---|
検索値を元に対象のみを抽出して表示する際に、既存の書式も併せて表示したい。
引用:が含まれるのであれば、なおさら楽ちんかと。 最も、 引用: が 条件付き書式で表せる様な判定基準が明確であるなら、その条件を VBA化する事が出来るでしょう。 |
![]() |
投稿日時: 22/01/05 21:27:51
投稿者: まさ@まさ
|
---|---|
お世話になっています。
|