【Excel2010】VBAのFormulaとは?使い方と意味を解説
- Excel2010を使用している人がVBAのFormulaについて知りたいです。Formulaとは何か、またどのように使われるのかについて説明します。
- また、Formulaを消してもマクロが正常に動作する理由も解説します。
- さらに、Formulaに関連する式も紹介し、その意味を解説します。
- ベストアンサー
【Excel2010】VBAのFormulaの意味
エクセル2010を使っている者です。 離れたセルの数字を置き換えられたらなと思ってその方法を探していたら、以下のマクロが見つかりました。 VBAは少しだけかじっているのでFormulaってなんだろうと思って、Formulaを消した状態でマクロを実行してみたのですが、消す前と同様にうまく動きました。 Formulaとはどういったものなのでしょうか?また、この場合、使う意味はあったのでしょうか? Sub swap() Dim w, x As Range, y As Range If Selection.Areas.Count <> 2 Then Exit Sub Set x = Selection.Areas(1) Set y = Selection.Areas(2) w = x.Formula x.Formula = y.Formula y.Formula = w End Sub それと、formulaのことを自分で調べようと思って検索していたら以下の式が見つかりました。 理解できなかったのですが、この場合もFoumulaと書く意味はあるのでしょうか? Range("A1").Formula = "=TODAY()" Range("B1").Formula = "=NOW()" Range("A5").Value = "合計" Range("B5").Formula = "=$B$2+$B$3+$B$4" よろしくお願いいたします。
- qazxcvfr4
- お礼率91% (833/910)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>Formulaとはどういったものなのでしょうか? ⇒セルのプロパティ(入れ物)の一つで数式のプロパティです。 この他に値のValue、フォント値のFont、その他プロパティが存在します。 >また、この場合、使う意味はあったのでしょうか? ⇒前述のプロパティの意味を理解できれば、意味がお分かりになると思います。 一度、このマクロで数式、値でお試し下さい。 >Foumulaと書く意味はあるのでしょうか? ⇒代入する場合、エクセルの自動翻訳で文字列の先頭が「=」ならFormulaプロパティに入れますので特に記載しなくても問題はありません。 但し、選択時にはプロパティで指定された内容になります事をご留意ください。
関連するQ&A
- VBA 変数の指定について
エクセル2010を使っている者です。 過去の質問を見ていると、以下の記述が見つかりました。 Sub swap() Dim w, x As Range, y As Range If Selection.Areas.Count <> 2 Then Exit Sub Set x = Selection.Areas(1) Set y = Selection.Areas(2) w = x.Formula x.Formula = y.Formula y.Formula = w End Sub 変数の指定のところで、x, yはRangeの型を指定していますが、 wはどのようになっているのでしょうか? 検索してみると、変数の型を書かないと自動でVariantとして扱われるように なっているとのことですが、この場合もwもVariant型になっているのでしょうか? また、このようにwを中途半端に書かずに Dim x As Range, y As Range とwを外して書いてしまってもwは変数として機能するのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- excel マクロ Selection.Formula
VBA初心者です。 excelの表に文字を記入して、それをカード化したいと思ってます。 テキストボックスをN回コピーして、それぞれに名前をつけて、またそれぞれにテキストが入力されたセルへ参照先を指定したいのですが、上手くいきません。 Dim n As Integer 'カードのコピー回数はD4のセルを参照 n = Range("input!D4").Value If n >= 1 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card1" Selection.Formula = "=formula!B6" End If If n >= 2 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card2" Selection.Formula = "=formula!B7" End If If n >= 3 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card3" Selection.Formula = "=formula!B8" End If If n >= 4 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card4" Selection.Formula = "=formula!B9" と延々と50回繰り返してます。 希望は150~200回繰り返したいのですが、 マクロ記録などや他の回答などを参考にしながら、 初心者なりに考えて、 Sub cardproductionA4() 'カードのコピー回数を指定 N=総回数 P=1~N回 Dim N As Integer, P As Integer N = Range("input!D4").Value 'カードのコピー For P = 1 To N If N >= P Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card" & CStr(P) Selection.Formula = "=formula!B(P+5)" End If Next P End Sub としました。 でも、参照先が漸次変わっていって欲しいのですが、 Selection.Formula の先がエラーで出来ません。 どのように記述すれば宜しいのでしょうか? あるいは、そもそもVBAを理解していないので、間違っているのかもしれませんが、 御教授お願い致します。
- ベストアンサー
- オフィス系ソフト
- excel2007VBA 二つの動作の繰り返し処理
excel2007でマクロを勉強し始めたばかりです。VBAの繰り返し処理をしたいのですが、以下のようなマクロの請求書個別発行を一括発行にしたいと考えています。繰り返し開始から、終了までを、数値がなくなるまで繰り返したい場合、どのようになるでしょうか。よろしくお願いします。 Sub 請求書個別発行() ' ' 請求書個別発行 Macro ' ' Range("A3:R24").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "売上一覧表!Criteria"), CopyToRange:=Range("W6:AN50"), Unique:=False Sheets("得意先").Select Range("C3:O90").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "得意先!Criteria"), CopyToRange:=Range("R6:AD325"), Unique:=False 繰り返し開始 Sheets("売上一覧表").Select Range("T4").Select (T4からT5,T6,T7、、、と降順に値がなくなるまで選択される。) Selection.Copy (T4=Y4) Range("Y4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Range("A3:R24").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "売上一覧表!Criteria"), CopyToRange:=Range("W6:AN50"), Unique:=False Sheets("請求書").Select Range("B16").Select (B16から、B17、B18,,,と降順に値がなくなるまで選択される。) Selection.Copy (B16=I6) Range("I6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("請求書").Select Application.Dialogs(xlDialogPrint).Show 繰り返し終了 End Sub 以下は自分なりに考えたVBAですが、エラーになります。 Sub 請求書集計発行() ' ' 請求書発行 Macro ' ' Range("A3:R24").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "売上一覧表!Criteria"), CopyToRange:=Range("W6:AN50"), Unique:=False Sheets("得意先").Select Range("C3:O90").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "得意先!Criteria"), CopyToRange:=Range("R6:AD325"), Unique:=False Dim wst1 As Worksheet Dim wst2 As Worksheet Set wst1 = ThisWorkbook.Worksheets("売上一覧表") Set wst2 = ThisWorkbook.Worksheets("請求書") Dim i As Long Dim j As Long For i = 4 To 100 For j = 16 To 100 If wst1.Range("T" & i) <> "" And Not IsNull(wst1.Range("T" & i)) Then If wst2.Range("B" & j) <> "" And Not IsNull(wst2.Range("B" & j)) Then myrow = wst1.Cells(Rows.Count, 1).End(xlUp).Row + 1 myrow = wst2.Cells(Rows.Count, 1).End(xlUp).Row + 1 wst1.Range("T" & myrow) = wst1.Range("Y4") Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Range("A3:R24").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "売上一覧表!Criteria"), CopyToRange:=Range("W6:AN50"), Unique:=False Sheets("請求書").Select wst2.Range("B" & myrow) = wst2.Range("I6") Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("請求書").Select Application.Dialogs(xlDialogPrint).Show End If Next i Next j End Sub
- ベストアンサー
- オフィス系ソフト
- vba
下記はマクロコードの最初のほうをもってきたものですが、 TypeName(Selection) = "Range" And Selection.Value<> "" の意味を説明していただけませんか。 TypeNameとは何か (Selection)とは何か TypeName(Selection) とは何か TypeName(Selection) = "Range" とは何か Selectiionとはカーソルがさしている何か1つのセルのようなものとみていいのでしょうか。 よくTypeName(Selection) = "Range" と検索するとフィットするのですが、何のために使っているのがわかりません。どういう目的のためにTypeName() 関数というのは、使われますか。 Sub Macro1() Dim ptr As Long Dim str As String If TypeName(Selection) = "Range" And Selection.Value <> "" Then ptr = 0
- ベストアンサー
- オフィス系ソフト
- Excel2003VBA Variantについて
教えてください。 下記にxのコードとyのコードとwのコードとを記載しました。 この内、 wのコード、xのコードでは(3)も含めノーエラーで終わるのですが、 yのコードでは(3)でエラーになってしまいます。 エラー内容は 「インデックスが有効範囲にありません。」 です。 どうしてでしょうか? ご教示をお願い致します。 記 Sub w() Dim B As Variant ReDim B(1) '・・・(1) ReDim B(5) '・・・(2) ReDim B(10) ReDim Preserve B(15) '・・・(3) End Sub Sub x() Dim B As Variant ReDim B(1) B = Split("B4:C15,D4:E15,F4:G15,B4:G15", ",") '・・・(1) ReDim Preserve B(5) '・・・(2) ReDim B(10) ReDim Preserve B(15) '・・・(3) End Sub Sub y() Dim B As Variant ReDim B(1) '・・・(1) ReDim B(5) '・・・(2) B = Evaluate("row(A1:A10)") ReDim Preserve B(15) '・・・(3) End Sub 以上
- ベストアンサー
- その他MS Office製品
- VBAマクロエラー【オーバーフローしました。】
以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub
- 締切済み
- Excel(エクセル)
- Excel2003 VBAにて条件付き書式のマクロを書きたいのですが、
Excel2003 VBAにて条件付き書式のマクロを書きたいのですが、どうも上手くいきません。 1列おき(C列、E列、G列・・・)に条件付き書式を設定し、 条件は、 ・セルの値が”0”より大きい場合はフォント”赤”で表示。 ・セルの値が”0”より小さい場合はフォント”緑”で表示。 としたいと思いマクロを組んでみました。 Sub Color() Dim j, j0 Dim x Worksheets("sheet1").Active Application.ScreenUpdating = False j0 = 3 j = 300 For x = 3 To 100 Step 2 Range(.Cells(j0, x), .Cells(j, x)).Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="0" Selection.FormatConditions(1).Font.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ Formula1:="0" Selection.FormatConditions(2).Font.ColorIndex = 10 Next Application.ScreenUpdating = True End Sub デバックでステップインしていくと、ここで実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。がでます。 Selection.FormatConditions(1).Font.ColorIndex = 3 -------------------------------------------------------------------------------------- Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="0" Selection.FormatConditions(1).Font.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ Formula1:="0" Selection.FormatConditions(2).Font.ColorIndex = 10 -------------------------------------------------------------------------------------- この間は、マクロの自動記録で書かれてるので間違ってはいないハズなのですが、、、 お知恵を下さい。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- オートフィルタ適用後のマクロ実行
過去の「Excel グラフのプロットからデータを見つける」という質問に回答されていたプロットされたマーカーをひとつだけ選択してマクロを実行は出来たのですが、オートフィルター適用後のグラフに対してはうまくいきません。どのように修正したら良いのかご教授ください。 Sub Test1() Dim myPoint As Point Dim myFormula As String Dim myPDLname As String Dim myWsName As String Dim x As String Dim y As String Dim n As Integer If TypeName(Selection) <> "Point" Then Exit Sub If TypeName(Selection) = "Point" Then Set myPoint = Selection myFormula = myPoint.Parent.Formula With myPoint .HasDataLabel = True myPDLname = myPoint.DataLabel.Name .HasDataLabel = False End With n = Split(myPDLname, "P")(1) x = Split(myFormula, ",")(1) y = Split(myFormula, ",")(2) myWsName = Split(x, "!")(0) End If MsgBox myWsName & "!" & Range(x)(n).Address & ":" & Range(y)(n).Address Sheets(myWsName).Select Sheets(myWsName).Range(Range(x)(n), Range(y)(n)).Select End Sub
- ベストアンサー
- Excel(エクセル)
- オートフィルタのマクロについて
オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- VBAについて
Private Sub Worksheet_SelectionChange(ByVal Target As Range) UserForm1.TextBox1.Text = Selection.Count ・・・(1) End Sub *************************************************************** ワークシートで選択されたセルの個数を上のようにして、TextBox1に表示させています。 そこで、例えば 1. Sheet1.Range(Cells(8, X), Cells(8, Y))が選択された場合、 ・(1)によって、TextBox1に「Y-X+1」を表示 ・TextBox2に、Sheet1.Cells(4, X) & Cells(4, Y))の値を表示 2. Sheet1.Range(Cells(10, X), Cells(10, Y))が選択された場合、 ・(1)によって、TextBox1に「Y-X+1」を表示 ・TextBox2に、Sheet1.Cells(4, X) & Cells(4, Y))の値を表示 させたいのですが、どのようにしたらよいのでしょうか?
- ベストアンサー
- Visual Basic
お礼
遅くなりましたが、ありがとうございました。