エクセル~ちょっとしたテクニック~
http://exceljouho.livedoor.biz/
エクセルの基本、小技等々、エクセルを十分活用するためにマクロ・VBAを含めたテクニックを随時紹介していきます。エクセル・マクロ・VBAで困った時の情報源になれば幸いです。
ja
-
セルに数式を設定する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51616187.html
エクセルVBAで処理をしているときに、セルに数式を設定・取得する方法です。
数式を設定する場合
Cells(1, 1).Formula = "=SUM(C1,C2)"
数式を取得する場合
Cells(1, 2) = Cells(1, 1).Formula
以下のサンプルコードで試してみてくださいね。
'********...
yas34mat
2008-09-03T16:18:20+09:00
エクセルマクロVBA:セルの操作
セルに数式を設定・取得する方法です。
数式を設定する場合
Cells(1, 1).Formula = "=SUM(C1,C2)"
数式を取得する場合
Cells(1, 2) = Cells(1, 1).Formula
以下のサンプルコードで試してみてくださいね。
'****************************************
'セルに数式を設定する
'****************************************
Sub Test14()
'C列に数字を設定
Cells(1, 3).Value = 10
Cells(2, 3).Value = 20
'A列に数式を設定
Cells(1, 1).Formula = "=SUM(C1,C2)"
Cells(2, 1).Formula = "=C1*C2"
'B列に数式を取得
Cells(1, 2) = Cells(1, 1).Formula
Cells(2, 2) = Cells(2, 1).Formula
End Sub
※上記の計算式がA1形式ですが、R1C1形式の場合は、FormulaをFormulaR1C1に変更します。
]]>
-
ランダムに数字を取得する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51463750.html
エクセルのちょっとしたテクニックを紹介します。
Rnd関数を使用することで、自分が指定した範囲からランダムに数字を抽出することができます。
AとBを整数とした場合、A~Bの間の整数値をランダムに取得する場合、以下のような構文になります。
構文
Int((...
yas34mat
2008-04-02T09:07:27+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニック を紹介します。
Rnd関数を使用することで、自分が指定した範囲からランダム に数字を抽出することができます。
AとBを整数とした場合、A~Bの間の整数値をランダムに取得する場合、以下のような構文になります。
構文
Int((B-A+1)*Rnd+A)
次のサンプルを試してみてくださいね。
50から100までの間の数字を、1行目から20行目までにランダム に取得します。
'***************************************
'乱数を取得する
'***************************************
Sub Test16()
Dim i As Integer
Randomize
For i = 1 To 20
Cells(i, 1).Value = Int((100 - 50 + 1) * Rnd + 50)
Next i
End Sub
ちなみに、サンプル中のRandomizeステートメントは、乱数発生ルーチンの初期値を設定するステートメントです。
☆エクセルVBA のおすすめ書籍⇒Excel VBA逆引き大全600の極意
]]>
-
複数のセルに一括入力@エクセル
http://exceljouho.livedoor.biz/archives/51144452.html
エクセルのちょっとしたテクニックを紹介します。
複数のセルに同じ文字を入力する場合、セルのコピーをすることが考えられますが、もっと効率の良く、複数のセルに一括入力する方法があります。
(1)文字を入力したいセルを選択します。
(2)セルを選択した状...
yas34mat
2008-04-02T01:40:56+09:00
エクセル:セル関連の操作
エクセルのちょっとしたテクニックを紹介します。
複数のセルに同じ文字を入力する場合、セルのコピーをすることが考えられますが、もっと効率の良く、複数のセルに一括入力 する方法があります。
(1)文字を入力したいセルを選択します。
(2)セルを選択した状態のまま、文字を入力します。
※このとき文字は変換の確定をし、文字の後ろにカーソルが残っている状態 にしておきます。
(3)入力を確定するときに、[Ctrl]+[Enter] を押します。
(4)これで選択したセルにすべて文字が入力されます。
※複数のセルに数式を入力する場合も使えるので、この方法は慣れると、結構便利ですよ。
]]>
-
ステータスバーに文字を表示する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51403898.html
エクセルのちょっとしたテクニックを紹介します。
処理が実行中なら「実行中・・・」と表示するようにするには、どうしますか?画面のちらつきを抑えるコードを書いている場合、ちょっと長い処理をさせると、処理中なのか、そうでないのかわからなくなるときがありません...
yas34mat
2008-03-04T06:40:52+09:00
エクセルマクロVBA:アプリケーション
エクセルのちょっとしたテクニック を紹介します。
処理が実行中なら「実行中・・・」と表示するようにするには、どうしますか?画面のちらつきを抑える コードを書いている場合、ちょっと長い処理をさせると、処理中なのか、そうでないのかわからなくなるときがありませんか?マクロの処理中に文字列を表示させることが出来ます。
表示する場合のコードは、
Application.StatusBar = "実行中・・・"
表示を解除する場合のコードは、
Application.StatusBar = False
これで実行中ならステータスバーに文字が表示されるのでわかりますね。あと、ステータスバーに文字を表示させるコードを書いたら、必ず解除するコードも書いてくださいね。書かないと処理が終わっても、ステータスバーの文字がそのままになってしまいます。
これを応用して処理の進み具合を把握することが出来ます。そうです。ループ構文に組み込んで使用します。
以下のサンプルコードを試してみてくださいね。
'***************************************
'ステータスバーに進捗状況を表示する
'***************************************
Sub Test13()
Dim Rw As Long
Dim Lastrow As Long
For Rw = 1 To 5000
Cells(Rw, 1).Value = Rw
Application.StatusBar = Rw & "件書込み中・・・"
Next Rw
Application.StatusBar = False
MsgBox "書き込み終了、今度は消去します。"
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For Rw = 1 To Lastrow
Cells(Rw, 1).Value = ""
Application.StatusBar = Rw & "件消去中・・・"
Next Rw
Application.StatusBar = False
MsgBox "終了しました"
End Sub
]]>
-
画面のちらつきを抑える@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51403836.html
エクセルのちょっとしたテクニックを紹介します。
エクセルマクロを記録して実行すると、同じシート内での処理でも画面がちらついたりしますよね。短い処理なら気にならないかもしれませんが、長い処理になると、気になってしまうのは私だけでしょうか?
画面のちらつ...
yas34mat
2008-02-25T06:52:15+09:00
エクセルマクロVBA:アプリケーション
エクセルのちょっとしたテクニック を紹介します。
エクセルマクロを記録して実行すると、同じシート内での処理でも画面がちらついたりしますよね。短い処理なら気にならないかもしれませんが、長い処理になると、気になってしまうのは私だけでしょうか?
画面のちらつきを抑える コードを紹介します。
Application.ScreenUpdating = False
コードのはじめに書いておいてください。画面の更新をコード終了まで止めるので、画面がちらつかないようになります。また、処理速度を上げる効果もあるので、長い処理のときには、特に効果的です。
]]>
-
空白のセルのある行を削除する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51340600.html
エクセルのちょっとしたテクニックを紹介します。
表などでデータが入力されていないセルが点在していて、その行全体を削除したいという場合、手作業では大変ですよね。VBAであらかじめコードを書いておけば、楽に処理できますよ。
'**************************...
yas34mat
2008-02-18T06:47:39+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニック を紹介します。
表などでデータが入力されていないセルが点在していて、その行全体を削除したいという場合、手作業では大変ですよね。VBAであらかじめコードを書いておけば、楽に処理できますよ。
'**********************************************
'アクティブセル列で空欄の場合、行全体を削除
'**********************************************
Sub Test12()
Dim Clmn As Long
Clmn = ActiveCell.Column
Application.ScreenUpdating = False
Columns(Clmn).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
上記のコードを使用した場合でも、空白のセルが残ることがあります。その場合は、残ったセルを調べてみてください。半角スペースや全角スペースが入っていることがあります。入っていたスペースを削除して再度上記のコードを実行すれば削除されます。
]]>
-
条件で処理を繰り返す(Do~Loop構文)@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51397337.html
エクセルのちょっとしたテクニックを紹介します。
Do~Loop構文は、指定した条件に合致している間、または、条件に合致しない間処理を繰り返すというものです。
・構文
指定した条件に合致している間処理を繰り返す場合、
1.Do While 条件文
...
yas34mat
2008-02-12T07:23:50+09:00
エクセルマクロVBA:基本構文
エクセルのちょっとしたテクニック を紹介します。
Do~Loop 構文は、指定した条件に合致している間、または、条件に合致しない間処理を繰り返すというものです。
・構文
指定した条件に合致している間処理を繰り返す場合、
1.Do While 条件文
処理
Loop
または、
2.Do
処理
Loop While 条件文
指定した条件に合致しない間処理を繰り返す場合、
1.Do Until 条件文
処理
Loop
または、
2.Do
処理
Loop Until 条件文
1と2の違いというと、1は条件に合わなければ処理は行いませんが、2では最低1回は処理を行います。どちらを使うかはどのような処理をさせるかによるので、使い分けてください。
以下のサンプルコードを試してみてくださいね。
'***************************************
'ループ処理テスト
'***************************************
Sub Test11()
Dim i As Integer
Dim Num As Integer
i = 0
Num = 1
Do Until Num > 100
Num = Num * 3
i = i + 1
Loop
MsgBox "ループ回数:" & i & "回"
End Sub
]]>
-
全角や半角の文字をそろえる@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51379844.html
エクセルのちょっとしたテクニックを紹介します。
エクセルのデータで文字列の一部が半角だったりするのを全角、半角どちらかにそろえるにはどうしますか?データを受け取ったときに、全角と半角が混在して見にくいということがありますよね。VBAで一括変換しちゃいまし...
yas34mat
2008-02-04T06:31:47+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニック を紹介します。
エクセルのデータで文字列の一部が半角だったりするのを全角 、半角 どちらかにそろえるにはどうしますか?データを受け取ったときに、全角と半角が混在して見にくいということがありますよね。VBAで一括変換しちゃいましょう。
このStrconv関数を使用すると、文字列の全角 と半角 、大文字と小文字、ひらがなとカタカナの変換ができます。
構文は、Strconv(文字列,引数) となります。引数については、下記のようになります。
vbUpperCase:文字列を大文字に変換します。
vbLowerCase:文字列を小文字に変換します。
vbProperCase:文字列の各単語の先頭の文字を大文字に変換します。
vbWide:文字列内の半角文字を全角文字に変換します。
vbNarrow:文字列内の全角文字を半角文字に変換します。
vbKatakana:文字列内のひらがなをカタカナに変換します。
vbHiragana:文字列内のカタカナをひらがなに変換します。
vbUnicode:文字列をUnicodeに変換します。
vbFromUnicode:文字列をUnicodeから既定のコードページに変換します。
以下のサンプルコードで試してみてくださいね。
'**********************************************
'アクティブセル列の文字を全角または半角にそろえる
'**********************************************
Sub Test10()
Dim Str As String
Worksheets.Add before:=Worksheets(1)
With Worksheets(1).Range("A1")
.Activate
.Value = "ABC123アイウ"
End With
Str = ActiveCell.Value
MsgBox "半角にします"
ActiveCell.Value = StrConv(Str, vbNarrow)
MsgBox "全角にします"
ActiveCell.Value = StrConv(Str, vbWide)
MsgBox "小文字にします"
ActiveCell.Value = StrConv(Str, vbLowerCase)
MsgBox "大文字にします"
ActiveCell.Value = StrConv(Str, vbUpperCase)
MsgBox "先頭を大文字にします"
ActiveCell.Value = StrConv(Str, vbProperCase)
MsgBox "カタカナをひらがなにします"
ActiveCell.Value = StrConv(Str, vbHiragana)
MsgBox "ひらがなをカタカナにします"
ActiveCell.Value = StrConv(Str, vbKatakana)
MsgBox "半角で小文字にします"
ActiveCell.Value = StrConv(Str, vbNarrow + vbLowerCase)
MsgBox "全角で先頭を大文字にします"
ActiveCell.Value = StrConv(Str, vbProperCase + vbWide)
End Sub
エクセルのワークシート関数を利用して変換する場合は、ASC関数:全角数字を半角数字に変換する@エクセル または、JIS関数:半角数字を全角数字に変換する@エクセル を参照してください。
]]>
-
スクロールする範囲を指定する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51341642.html
エクセルのちょっとしたテクニックを紹介します。
表示されている部分以外ワークシートを触られたくない場合など、スクロールする範囲を指定することができます。指定された領域の外側には、カーソルを移動することができません。
例)1枚目のワークシートのスクロー...
yas34mat
2008-01-31T08:00:31+09:00
エクセルマクロVBA:シートの操作
エクセルのちょっとしたテクニック を紹介します。
表示されている部分以外ワークシートを触られたくない場合など、スクロール する範囲を指定することができます。指定された領域の外側には、カーソルを移動することができません。
例)1枚目のワークシートのスクロール する範囲をセルA1からセルM30に限定します。
'**********************************************
'スクロール領域を設定する
'***********************************************
Sub Test8()
ActiveSheet.ScrollArea = "A1:M30"
End Sub
'**********************************************
'スクロール領域を設定解除する
'***********************************************
Sub Test9()
ActiveSheet.ScrollArea = ""
End Sub
※ScrollAreaプロパティは、A1形式で範囲を指定します。また、ブックを開いた時点で設定したい場合、Workbook_Openイベントに記述します。
]]>
-
セルのアドレスを取得する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51340589.html
エクセルのちょっとしたテクニックを紹介します。
選択した範囲のアドレスを取得する方法です。
'*********************************************
'選択した範囲のアドレスを取得する
'*********************************************
Sub Test7()
Dim Rng A...
yas34mat
2008-01-29T08:00:46+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニックを紹介します。
選択した範囲のアドレスを取得する方法です。
'*********************************************
'選択した範囲のアドレスを取得する
'*********************************************
Sub Test7()
Dim Rng As Range
Set Rng = ActiveWindow.RangeSelection
'絶対参照
MsgBox "選択した範囲のアドレスは " & Rng.Address
'A1形式
MsgBox "選択した範囲のアドレスは " & Rng.Address(False, False)
'R1C1形式
MsgBox "選択した範囲のアドレスは " & Rng.Address(False, False, xlR1C1)
End Sub
※印刷範囲やスクロールエリアを設定するときなどに使えますよ。
]]>
-
選択したセル範囲内で処理を行う@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51367246.html
エクセルのちょっとしたテクニックを紹介します。
行全体や列全体で処理させるのではなく、行の一部とか列の一部など自分が選択した範囲内だけマクロで処理したいと言った場合どうしますか?その都度、コードを書き直すのは面倒くさいし、非効率ですよね。自分が選択し...
yas34mat
2008-01-27T08:51:12+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニック を紹介します。
行全体や列全体で処理させるのではなく、行の一部とか列の一部など自分が選択した範囲内だけマクロで処理したいと言った場合どうしますか?その都度、コードを書き直すのは面倒くさいし、非効率ですよね。自分が選択した範囲を一つのコレクションと考え、その中で処理をさせるようにすれば良いのです。
例として選択したセルにOKという文字を入力する場合、以下のように記述します。
'***********************************
'選択範囲内で処理をさせる
'***********************************
Sub Test6()
Dim Rng As Range
Dim rn As Range
Set Rng = ActiveWindow.RangeSelection
For Each rn In Rng
rn.Value = "OK"
Next rn
End Sub
※上記の場合、選択するセルは必ずしも隣接している必要はありません。
※似たような処理として、手作業で選択したセルに同じ内容を入力する操作は複数のセルに一括入力@エクセル を参照してください。
For~Next構文 内の処理を変えれば、メニューバーに自作マクロを登録しておいたりするときなどに、結構使えるテクニックなので、ぜひ使ってみてくださいね。
]]>
-
ループ処理(For~Next)@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51367231.html
エクセルのちょっとしたテクニックを紹介します。
処理内容を繰り返しループさせる場合に使います。よく使う構文の一つで処理回数や処理範囲が決まっている場合には有効です。
・構文
For 変数 = 変数の開始 To 変数の終わり Step 変数の移動幅
処理...
yas34mat
2008-01-25T08:39:47+09:00
エクセルマクロVBA:基本構文
エクセルのちょっとしたテクニックを紹介します。
処理内容を繰り返しループ させる場合に使います。よく使う構文の一つで処理回数や処理範囲が決まっている場合には有効です。
・構文
For 変数 = 変数の開始 To 変数の終わり Step 変数の移動幅
処理1(カウンタ変数を含めた処理を記述します。)
Next 変数
以下のサンプルコードで確認してくださいね。
'************************************
'ループ 処理(A列の1行目から20行目に
'1から20まで数字を順に入力していきます)
'************************************
Sub Test5()
Dim i As Integer
For i = 1 To 20
Cells(i, 1).Value = i
Next i
End Sub
]]>
-
列の幅・行の高さを調節する@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51340593.html
エクセルのちょっとしたテクニックを紹介します。
セルの列幅や行の高さを入力されている文字列に合わせて調節できます。
・列幅を調節する場合
Range("A1").EntireColumn.AutoFitまたは
Columns(1).AutoFit
・行の高さを調整する場合
...
yas34mat
2008-01-24T01:17:17+09:00
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニックを紹介します。
セルの列幅や行の高さを入力されている文字列に合わせて調節できます。
・列幅を調節する場合
Range("A1").EntireColumn.AutoFit または
Columns(1).AutoFit
・行の高さを調整する場合
Range("A1").EntireRow.AutoFit または
Rows(1).AutoFit
以下のサンプルコードで試してみてくださいね。
Sub Test2()
With Range("A1")
.Value = "あっという間にセルの列幅や行の高さが変わります。"
.RowHeight = 30
.ColumnWidth = 30
End With
MsgBox "列幅を調節"
Range("A1").EntireColumn.AutoFit
MsgBox "行の高さを調節"
Range("A1").EntireRow.AutoFit
With Range("A1")
.RowHeight = 30
.ColumnWidth = 30
End With
MsgBox "列幅を調節"
Columns(1).AutoFit
MsgBox "行の高さを調節"
Rows(1).AutoFit
End Sub
]]>
-
処理を分岐させる(Select Case構文)@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51345352.html
エクセルのちょっとしたテクニックを紹介します。
IF構文とは別に一つの条件式に対して、複数の処理を分岐させることができます。それが、Select Caseステートメントです。この場合、IF構文でもコードは書けますが、Select Caseステートメント...
yas34mat
2008-01-19T02:06:29+09:00
エクセルマクロVBA:基本構文
エクセルのちょっとしたテクニックを紹介します。
IF構文とは別に一つの条件式に対して、複数の処理を分岐させる ことができます。それが、Select Caseステートメントです。この場合、IF構文 でもコードは書けますが、Select Caseステートメントの方がすっきりしていて見やすいです。
・構文
Select Case 条件式
Case 条件式の値1
処理1
Case 条件式の値2
処理2
Case Else
処理3
End Select
※条件式が値1の場合、処理1、値2の場合、処理2を行い、それ以外は処理3を行うという意味です。
以下はサンプルコードになります。試してみて下さいね。
Sub Test4()
Dim Num As Integer
Num = InputBox("数字を入力して下さい。")
Select Case Num
Case 1 To 9
MsgBox "1桁"
Case 10 To 99
MsgBox "2桁"
Case 100 To 999
MsgBox "3桁"
Case Else
MsgBox "1~3桁までの正の整数を入力してくださいね。"
End Select
End Sub
]]>
-
処理を分岐させる(IF構文)@エクセルマクロVBA
http://exceljouho.livedoor.biz/archives/51345307.html
エクセルのちょっとしたテクニックを紹介します。
VBAでは、条件によって処理を分岐させることが出来ます。VBAでコードを書くと頻繁に使う構文の一つです。IFを使った処理分岐の構文は以下の通りとなります。
・構文1
If 条件文1 Then
処理...
yas34mat
2008-01-17T01:59:07+09:00
エクセルマクロVBA:基本構文
エクセルのちょっとしたテクニックを紹介します。
VBAでは、条件によって処理を分岐させる ことが出来ます。VBAでコードを書くと頻繁に使う構文の一つです。IF を使った処理分岐の構文は以下の通りとなります。
・構文1
If 条件文1 Then
処理1
End If
※条件文1がTrueなら、処理1を行うという意味です。
この場合、一行で書く書くと以下のようになります。
If 条件文1 Then 処理1
・構文2
If 条件文1 Then
処理1
Else
処理2
End If
※条件文1がTrueなら、処理1を行い、それ以外は処理2を行うという意味です。
構文2で条件分岐を増やすには、以下のようになります。
If 条件文1 Then
処理1
ElseIf 条件文2 Then
処理2
ElseIf条件文3 Then
処理3
Else
処理4
End If
以下は、サンプルコードになります。試してみてくださいね。
Sub Test3()
Dim Num As Integer
Num = InputBox("数字を入力して下さい。")
If Num < 20 Then
MsgBox "未成年"
Else
MsgBox "成年"
End If
End Sub
]]>