質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

988閲覧

言語化が出来ません…

Mico125

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/05/24 10:00

VBAについて質問があります。
初心者です。色々調べましたが、どうしたら言語化出来るか結局わからず、この場を借りてアドバイスをいただければと思い投稿させて頂きました。

実現したいこととしては、
指定したセルになんからの文字が入っていたら、別のsheetの同じ名前のついた行と列のセルに色を付ける。
というものです。

例えば、
sheet1のA列のA2から下に『りんご』『ばなな』『メロン』といった名前が入っているとします。
また、1行目にはB1から5/1、5/2と言うように、日付が入っているとします。

sheet2にはA列のA2から下に『ばなな』『りんご』『メロン』と名前が入っています。
※Sheet1と同じ順番で名前は入っていません。ランダムです。
また、1行目にはB1から5/1、5/2と入っていますが、Sheet1とは違い、日付同士が4列あいています。各日付に4列与えられているということになります。(5/1はB1、5/2はF1のセル)

これらを前提条件として、
Sheet1の『りんご』の行の5月2日に「A」といった何らかの文字が入った場合、Sheet2の『りんご』の行の5月2日の4列に色をつけたいということです。

説明下手ですみません。
VBA勉強中でまだまだ分からないことだらけです。
アドバイスを頂いてこれからもっと詳しくなっていきたいので、お力をお借り出来ればと思います。
よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/24 10:02

まず思った通りにコードを書いてみては? 言葉にできなくてもそれでやろうとしていることが伝わることもあります。(ないときもあるけど、何もしないよりマシ)
meg_

2020/05/24 10:08

・文章だけでは分かりにくいので、シートのイメージ画像を掲載すると良いかと思います。 ・VBA勉強中とのことですが、「Sheet1の『りんご』の行の5月2日に「A」といった何らかの文字が入っ」ているかどうか?ぐらいはVBAで書けますか?
guest

回答2

0

【マクロの記録】を使う

先ずはマクロの記録を使って、Excel-VBAを自動作成されたら如何でしょうか。
リボンへ開発メニューを登録してマクロの記録をクリックすると開始されます。
(開発メニューはファイル・オプション・リボンで登録できる筈です。)

マクロの記録開始後に、検索/色付け/関数書き込み等行うと、VBAプログラムが
勝手に作成されます。

こちらを基に、修正を加えつつ動作させることで感じが掴めるかと思います。
VBAのコーディング画面からF8を押すと1行づつ実行されます。
その後に疑問点を絞って調べられれば宜しいかと思います。

p.s.
私見ですがプログラミングで最も重要な事は名前付けです。
内容に対して適切な名前を付ける必要があります。
今回のタイトル「言語化が出来ません…」も一種の名前付けになります。
後々の時間経過後に見た時に、その名前から内容を思い出せる様な名称を付けるのが良いです。

投稿2020/05/25 00:04

編集2020/05/26 03:50
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

言語化が出来ません…

始まり 前提条件  シート「Sheet1」の「A1」を含むアクティブな表がある  シート「Sheet2」の「A1」を含む表は1項目が4列使っている Sheet1の表のセル範囲の各行を順に見て行く     各行の2つ目のセルから最後まで、各セルを順に見ていく       もし、各セルの値が空白でないなら、その時は、         Sheet2の表の範囲について         行の位置の取得=その1列目のどの行にあるかMatch関数で検索         列の位置の取得=(各セルの列番号-2)×4+2         その表のうちのセル範囲(行の位置,列の位置)を塗潰す    次のセル 次の行 終り

これをVBA語に翻訳すると、

ExcelVBA

1Option Explicit 2 3'始まり 4Sub test() 5 6' 7'前提条件 8' シート「Sheet1」の「A1」を含むアクティブな表がある 9Dim rngOld As Range: Set rngOld = Worksheets("Sheet1").Range("A1").CurrentRegion 10' シート「Sheet2」の「A1」を含む表は1項目が4列使っている 11Dim rngNew As Range: Set rngNew = Worksheets("Sheet2").Range("A1").CurrentRegion 12Const cmyNum As Long = 4 13' 14Dim r As Range 15'Sheet1の表のセル範囲の各行を順に見て行く 16For Each r In rngOld.Rows 17' 各行の2つ目のセルから最後まで、各セルを順に見ていく 18 Dim ix As Long 19 Dim ixRow As Long 20 Dim ixCol As Long 21 Dim c As Range 22 For ix = 2 To r.Columns.Count 23' もし、各セルの値が空白でないなら、その時は、 24 Set c = r.Cells(ix) 25 If c.Value <> Empty Then 26' Sheet2の表の範囲について 27 With rngNew 28' 行の位置の取得 = その1列目のどの行にあるかMatch関数で検索 29 ixRow = WorksheetFunction.Match(c, .Columns(1), 0) 30'      列の位置の取得=(各セルの列番号-2)×4+2 31 ixCol = (ix - 2) * cCol + 2 32'      その表のうちのセル範囲(行の位置,列の位置)を4列分拡張して塗潰す 33 .Cells(ixRow, ixCol).Resize(, cCol).Interior.Color = vbRed 34 End With 35 End If 36' 次の番号 37 Next 38'次の行 39Next 40' 41'終り 42End Sub 43

とりあえず、こんな感じですかね?
コンパイルも動作確認もしてないです。
どこかに論理の飛躍や説明の抜けがあるかも知れませんが、
この辺を叩き台に、組み立ててデバッグしてみてください。
参考になれば。

投稿2020/05/24 23:48

編集2020/05/25 00:06
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問