EXCEL・VBAでの数式代入方法についての質問

このQ&Aのポイント
  • EXCELで指定のセルに数式を代入する方法について質問があります。普通は「Worksheets("xx").Range("F1").Formula = "=CONCATENATE($A$1,$C$1)"」と書けば良いのですが、指定の数式を代入する際にはどのように書けば良いでしょうか。
  • 数式代入の際、特定のテキストを含めた数式を代入する方法について知りたいです。例えば、"=CONCATENATE("請求_",$D$1,".xlsm)"という数式を指定のセルに代入する場合にはどのように記述すればよいですか。
  • 質問者は「dim seikyuu , exten as string\nseikyuu = "請求_"\nexten = ".xlsm"\nWorksheets("xx").Range("F2").Formula = "=CONCATENATE(" & seikyuu & ",$D$1," & exten & ")"」と書く方法が良いと考えているが、これが正しいかどうか知りたいと言っています。
回答を見る
  • ベストアンサー

EXCEL・VBAに関する質問です。

EXCELで或るセルに数式を代入したい場合、普通は Worksheets("xx").Range("F1").Formula = "=CONCATENATE($A$1,$C$1)" と書けば好いと思いますが、 =CONCATENATE("請求_",$D$1,".xlsm") と代入したい場合、どう書いたら好いのでしょうか。よろしくお願いします。 ちなみに私は dim seikyuu , exten as string seikyuu = "請求_" exten = ".xlsm" Worksheets("xx").Range("F2").Formula = "=CONCATENATE(" & seikyuu & ",$D$1," & exten & ")" としたら好いかと思うのですが、考え方は合っているでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

Worksheets("xx").Range("F2").Formula = "=CONCATENATE(" & seikyuu & ",$D$1," & exten & ")" ですね。これでも全く問題はありませんし、どっちかというときれいなんですが Worksheets("xx").Range("F2").Formula = "=CONCATENATE(""請求_"",$D$1,"".xlsm"")" でも行けるはずです。""でくくられた中で"を生かすには、2つ続けて""とすればよかったはずです。

kichi4182
質問者

お礼

ありがとうございます。 今回の手法は、代入するセルが多くあるのと、もしかしたら、「請求_」の部分を可変にするかもしれない可能性を考えました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

Dim seikyuu as string, exten As String 'ココ間違い seikyuu = "請求_" exten = ".xlsm" Worksheets("Sheet3").Range("F2").Formula = "=CONCATENATE(""" & seikyuu & """,$D$1,""" & exten & """)" とかでもいいです。リクツが判ればどちらに"""を持たせても同じというだけのことですが。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 変数が文字列になりませんので次の方法は如何でしょうか。 seikyuu = "請求_" exten = ".xlsm"   ↓ seikyuu = """請求_""" exten = """.xlsm"""

関連するQ&A

  • Excel2007 VBAについて

    Excel2007 VBAについて質問です。 現在マクロでExcelデータを毎朝8時に保存フォルダに自動保存しているのですが、今回保存フォルダの中に年別フォルダ、月別フォルダを作成しその中に保存していきたいと思っています。 例 2013年フォルダの中に1月~12月のフォルダ 2013年2月25日の保存データは2013年フォルダ内の2月フォルダ内に保存。 ちなみに年度別フォルダは、2030年ぐらい迄作る予定です。 以下現在のマクロです。 Sub 自動保存() Dim 年 As String Dim 月 As String Dim 日 As String 年 = Year(Now()) 月 = Month(Now()) 日 = Day (Now()) With Workbooks (″サンプル.xlsm″) WorkSheets(″Sheet3″).Range(″B6:B205″).Value = Worksheets(″メインモニタ″).Range(″F13:F212″).Value End With Worksheets(″Sheet3″).Select Worksheets(″Sheet3″).Copy Application.DisplayAlerts = False Const mypath As String = ″C:¥保存データ¥″ With ActiveWorkbook.SaveAs″C:¥保存データ¥″_&年&″年″&月&″月″&日&″日″&″.xlsx″.Close End With Application.DisplayAlerts = True Application.Ontime DeteValue(Dete +1)+TimeValue(″8:00:00″),″自動保存″ Worksheets(″メインモニタ″).Activate End Sub すいませんがご指導願います。

  • EXCEL2000とEXCEL2003のVBAについて

    現在、EXCEL2000で下記のコードを実行しています。 が、EXCEL2003で実行すると、 .UsedRange.Copy myb のコードが実行されているのにコピー出来ていません。 ファイルは開いていて、エラーは出ていないのです。 問題点わかる方教えていただけますか? Sub 日別データ読込() Dim rngsaki As Range Dim pathmacrobook As String Dim namebook As String Dim motobook As Workbook Dim myb As Variant Set rngsaki = Workbooks("残高集計用.xls").Worksheets(3).Range("a2") pathmacrobook = ThisWorkbook.Path & "\CSV読込データ12\" namebook = Dir(pathmacrobook & "*.xls") Do While Not namebook = "" Set motobook = Workbooks.Open(pathmacrobook & namebook) Set myb = Workbooks("残高集計用.xls").Worksheets(3).Range("A65536").End(xlUp) With motobook.Worksheets("Sheet1") .UsedRange.Copy myb End With motobook.Close False namebook = Dir() Loop MsgBox "完了しました" End Sub

  • 異なるワークシートに値を貼り付けるマクロ

    数式の入ったワークシートから値のみをコピー&ペーストしたいのですが、うまくいきません。 どこにxlPasteValuesを入れたらいいのでしょうか?よろしくお願いします。 Sub copypaste() Dim bk As Workbook Set bk = Workbooks("‘貼り付け先.xlsm") Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B2:F6").Copy bk.Worksheets("Sheet1").Range("B2:F6")

  • EXCEL2010エラーVBA

    下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

  • エクセルVBAについて

    前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。

  • 【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" よろしくお願いいたします。

  • エクセルで100以上のシートからデータを読み込むのに時間がかかり困っています

    エクセル2003でAuto_Open時にデータの更新をしてみましたが、一々画面を読んでしまい時間がかかってしまいます。 まだコードがよく理解できていませんので、どなたかよい方法を教えてください。 コードは以下のようです。 シートは180あり、一覧表にシート名の表を作りました。 よろしくお願いします。 Sub Auto_Open() 'シートオープンで一覧表のデータ更新 '変数の宣言 Dim MyDA As Integer Dim MyDB As String Dim MyDC As String Dim MyDD As String Dim MyDE As String Dim MyDF As String Dim MyDG As String Dim MyDH As String Dim MyDI As String Dim MyDJ As String Dim MyDK As String For MyDA = 3 To 173 '一覧表を呼びシート名の代入 Worksheets("一覧表").Activate MyDB = Range("T" & MyDA).Value '必要なデータの代入 Worksheets(MyDB).Activate MyDC = Range("J3").Value MyDD = Range("J4").Value MyDE = Range("B6").Value MyDF = Range("F6").Value MyDG = Range("K6").Value MyDH = Range("C9").Value MyDI = Range("B8").Value If MyDI = "" Then MyDI = "-" End If MyDJ = Range("F8").Value If MyDJ = "" Then MyDJ = "-" End If MyDK = Range("K8").Value If MyDK = "" Then MyDK = "-" End If Sheets("一覧表").Activate Range("B" & MyDA) = MyDC Range("C" & MyDA) = MyDD Range("D" & MyDA) = MyDE Range("E" & MyDA) = MyDF Range("F" & MyDA) = MyDG Range("G" & MyDA) = MyDH Range("H" & MyDA) = MyDI Range("I" & MyDA) = MyDJ Range("J" & MyDA) = MyDK Next MyDA End Sub

  • コードの簡略化 VBA

    dim a as string dim b as string dim c as string dim d as string dim e as string dim f as string dim g as string dim h as string dim i as string a = "○○" b = "○○" c = "○○" d = "○○" e = "○○" f = "○○" g = "○○" h = "○○" i = "○○" 上記のような形でたくさん宣言しているのですが、 実際はもっとあり、これだととても長いコードになってしまいます(・・;) なんとか簡略化したいとは考えたのですがよい方法が見つからず 皆さんよろしくお願いいたします_(_^_)_

  • VBAに関する質問

    VBA初心者のものですが、エクセル形式で保存されているいくつかのブックのシートの中身をテキストエディタ(MIFESというもの)に.csv形式で上から順に貼り付けていき保存するということは可能でしょうか? 例えば workbooks("wb1").worksheets("data").range("a1:f1")が 1  2 3  4  5 6  7 workbooks("wb2").worksheets("data").range("a1:f1")が 8 9 10 11 12 13 14 という2つのブックが存在するなら 1,2,3,4,5,6,7, 8,9,10,11,12,13,14, とテキストエディタにコピーしていく感じです。 イメージとして恐らく非常におかしなコードだと思いますが、 Sub test() Dim wb As Workbook Dim i As Integer, v As Integer Dim OpenFilename As String, wc As String dim ap as double i = Application.InputBox("コピーしたいファイル数を記入してください", Type:=1) ap = shell("MIW.exe") For v = 1 To i OpenFilename = Application.GetOpenFilename("Microsoft Excelブック,*.xls") Workbooks.Open Filename:=OpenFilename Set wb = ActiveWorkbook  wb.worksheets("data").range("a1:f1").copy appactivate ap sendkeys "^V", true appaplication,wait now+timevalue("0:00:05") appactivate application.caption application.cutcopymode = false next v end sub というような感じです。 最初、エクセルで一つのシートに対し貼り付け作業を行ったあと.csv形式で保存すればいいだろうと思っていたのですが、一つ一つのシートの容量が大きく、エクセルで処理できる容量をこえてしまいそのやり方では無理なようです。分かりにくいところなど多々あるとは思いますが、時間がございましたら、手助けとなるコードなり指摘なり示して頂ければと思います。宜しくお願いします。

  • エクセルVBAを教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?

専門家に質問してみよう