絞り込み条件を変更する
検索条件を絞り込む
有料ブログの投稿方法はこちら

すべてのカテゴリ

23 件中 1 - 23 件表示
カバー画像

[VBA実践]Excel関数を有効活用しよう![#4]

前回の記事はこちらさて、前回の記事で、CellsとRangeを組み合わせ、スマートなコードを書くことが出来ました。それが以下になります。Sub 担当者ごと抽出()     Dim targetName As String     Dim rowLong As Long     Dim exRowLong As Long     targetName = Cells(1, 9).Value     exRowLong = 2     For rowLong = 2 To 16         If Cells(rowLong, 6).Value = targetName Then             '一緒だった時の処理             Debug.Print "担当者名が" & targetName & "と同じです!"             Range(Cells(exRowLong, 11), Cells(exRowLong, 16)).Value = Range(Cells(rowLong, 1), Cells(rowLong, 6)).Value             exRowLong = exRowLong + 1         Else             'そうでない時の処理             Debug.Print "担当者名が" & targetName & "ではありません!"         End If     Next End Subこのコードの問題点は、For文の範囲が2~16となっており
0
カバー画像

[VBA実践]RangeとCellsを組み合わせよう![#3]

前回の記事はこちら前回の記事で、・抽出担当者のデータのみを抜き出して転記するという、マクロのメイン機能は作成完了しました。ただ、まだまだ改良の余地はあります。今回の記事を通して、RangeとCellsを組み合わせ、前回書いた記事をもう少しスマートにしてみましょう。前回書いた記事は以下の通りですね。Sub 担当者ごと抽出()     Dim targetName As String     Dim rowLong As Long     Dim exRowLong As Long     targetName = Cells(1, 9).Value     exRowLong = 2     For rowLong = 2 To 16         If Cells(rowLong, 6).Value = targetName Then             '一緒だった時の処理             Debug.Print "担当者名が" & targetName & "と同じです!"             Cells(exRowLong, 11).Value = Cells(rowLong, 1).Value             Cells(exRowLong, 12).Value = Cells(rowLong, 2).Value             Cells(exRowLong, 13).Value = Cells(rowLong, 3).Value             Cells(exRowLong, 14).Value = Cel
0
カバー画像

[VBA実践]とにかくマクロを完成させよう![#2]

前回の記事はこちらさて、前回までで、1行分のデータを抽出対象か、そうでないか判定するところまでは書きました。以下のようなコードになっているはずです。Sub 担当者ごと抽出()     Dim targetName As String     targetName = Cells(1, 9).Value     If Cells(2, 6).Value = targetName Then         '一緒だった時の処理         Debug.Print "担当者名が" & targetName & "と同じです!"     Else         'そうでない時の処理         Debug.Print "担当者名が" & targetName & "ではありません!"     End If End Subこの状態から、「まずは完成させること」を最優先して、実際にコードを書いてみましょう。1行分の処理を完成させるさて、前回まででは「抽出担当者名と等しいかを判定するところまで」で終わっていました。あと必要なのは、1.等しい場合、A列~F列の値をK列からP列にそれぞれ転記する2.1行に対して行った処理を、入力されているすべての行に対して繰り返すという処理ですね!さて、今Excelのシート上では、上の画像のような配置になっていると思います。担当者名が抽出対象と同じであれば、A列の値をK列の値に代入すれば良いことになりますね。A2セルの値をK2セルに代入するコードはすぐに思いつきますか?Cells(2,11).Value = Cell
0
カバー画像

[VBA実践]ゴールと道のりを明確にしよう![#1]

前回までの記事で、VBAの「これだけは理解しておいてほしい」という内容の解説は終了しました。今回から、[VBA実践]シリーズとして、実際にVBAを書き、マクロを作り上げていく流れを体験していただきます!手順1.ゴールを決めるマクロを作ることで、様々なことが自動化出来ます。とはいえ、「何をするのか」が明確でなければ、何も作ることが出来ません。というわけで、「何をするのか」というゴールをまず決めます。普段お仕事をされている方であれば、「どんな業務が面倒か」「どんな業務に手間がかかっているか」を考え、「それを自動化する」ことをゴールにすると良いです。今回の例として、「売上をまとめているExcelの一覧から、担当者ごとの一覧を作成する業務の自動化」を考えてみます。以下の画像を見て下さい。どの担当者がどの商品をどのくらい売り上げたのか、というものが一つにまとまっていますね。これを「売上一覧」というシート名で作っておきます。ちなみに、商品情報は別のシートに以下のように作っておき、金額を参照するようにすると、より実践的ですね。この商品情報が載っているシートを「商品情報」というシート名にしておきます。これらのようなシートをまず準備してみてください。もちろん、数式などは適宜活用しましょう。(Noの欄や、売上一覧の単価、売上なんかは数式が活用出来ますね)今回は「売上一覧から担当者ごとの情報を抽出する」のがゴールなので、売上一覧シートの右側に以下を以下のようにしましょう。I1セルに抽出担当者名を入力し、「抽出」ボタンを押すと、全員の売上一覧から担当者分のみ、K~P列に転記される、というイメージですね
0
カバー画像

[VBA解説]For文でループ処理を書こう![#6]

前回はこちら今回の記事で、プログラミングのメイン(と僕が思っている)内容の基礎は終了です。「ここまでの内容も少し怪しい…」という人も、一旦ここまで通して読みつつコードも書いてみて、何となくで良いのでイメージを掴んでいって下さい。For文の書き方早速ですが、For文を使ったマクロのサンプルが以下の通りです。Sub For文を試す()     Dim colLong As Long     For colLong = 1 To 10         Cells(10, colLong).Value = colLong     Next End SubcolLongは変数です。For colLong = 1 To 10Nextの部分が今回のメインですね。日本語で説明すると、For colLong = 1 To 10は「colLongは1から始まって、10まで以下の処理を行う」という意味です。そしてNextが「次へ」ですね。どういうことかと言うと、最初はcolLongが1の状態で、Cells(10, colLong).Value = colLong の処理が行われます。そしてNextに進むと、「colLongが2の状態で」Cells(10, colLong).Value = colLong の処理が行われます。それをcolLongが10になるまで繰り返し、11になるとNextより下の処理に進みます。(今回の場合、End Subで終了です)つまり、ForとNextの間の処理を何度も通るんですね。その繰り返す範囲を、For 変数=最初の値 To 最後の値という書き方で表現します
0
カバー画像

[VBA解説]IF文を理解しよう![#5]

前回の記事はこちらIF文の使い方さて、前回予告した通り、今回はIF文という少しこれまでと違う要素を解説します。具体的にどう違うかと言うと、これまでに解説した内容は、1行で完結していた内容ばかりでした。例えば、Range("A1").Value = 10であれば、A1セルに10という値を代入する、という意味でしたし、Dim cost As Longであれば、costというLong型の変数を使うよ、という意味でした。これから解説するIF文は、複数の行に影響があります。ちなみに、「IF」は「もし~なら」という英単語ですね。VBAでもその意味は変わりません。それを踏まえて、次のコードに一度目を通してみて下さい。Sub IF文を試す()     Dim targetValue As Long     targetValue = Cells(5, 1).Value     If targetValue > 60 Then         Cells(5, 2).Value = "合格"     Else         Cells(5, 2).Value = "不合格"     End If End SubtargetValueはLong型の変数ですね。今回大事なのは、「If」「Then」「Else」「End If」の4つです。今回「IF文」という説明をしましたが、実際にはこのように、If、Then、Else、End Ifの4つがセットで出てくることがほとんどです。ちなみに「>」は「右より左の方が大きい」という意味です。算数で習う通りですね。If targetValue &gt
0
カバー画像

[VBA解説]セルのもう一つの指定方法[#4]

前回の記事はこちら前回の問題の解説さて、前回の問題は解けましたでしょうか。ちなみに修正前は以下のようなコードでした。Sub あいさつを入力する謎マクロ()     Dim あいさつ As String     あいさつ = おはよう     Range("C1").Value = あいさつ End Subこれを修正すると、こうなります。 Sub あいさつを入力する謎マクロ()     Dim あいさつ As String     あいさつ = "おはよう"     Range("C1").Value = あいさつ End Sub「あいさつ」という変数に、「おはよう」という文字列を代入したいので、「おはよう」が文字であることを示すために、""で囲う必要がある、というものでした。最初は""で囲うのに慣れないかもしれませんが、忘れないようにしましょうね。というわけで、今回のメインの内容に移ります!Rangeは「セル」という意味ではないさて、皆さんに謝らなければいけないことがあります。「Rangeはセルという意味だよ」と言ってきましたが、嘘です。厳密には、「Rangeは範囲」です。(ただ日本語訳しただけですが)どういうことかと言うと、Rangeはセル一つを指定するために使われるのではなく、「複数のセルの集まり(つまり範囲)を指定出来るもの」なんです。例えば、A1セルからA3セルを指定したければ、Range("A1:A3")と書くことで、複数のセル範囲を指定出来ます。では、VBAで「セル」を意味する単語は何かと言えば、Cellsなんですね。そして、Cellsを使ってA2セ
0