VBAの変数の使い方

このQ&Aのポイント
  • VBA初心者の方が3か月後の月末より小さいデータを他のシートにコピーするコードを作成したい場合、変数の使い方についてアドバイスをお願いします。
  • 直打ちすると正常に機能するコード内の日付を変数で取得しようとした際にうまくいかない問題が発生しています。
  • 変数の使い方を正しくするために、Criteria1の引数に変数を使う方法について教えてください。
回答を見る
  • ベストアンサー

VBAの変数の使い方

すみません、VBA初心者です。 日付が3か月後の月末(2020/10/31)より小さいデータを他のシートにコピーするコードを作りたいです。 3か月後の日付を、2020/10/31と直打ちすると正常に機能するのですが、以下のように変数(sLast)を使用すると上手くいきません。 変数の使い方が間違っていますでしょうか? ・上手くいく Criteria1:="<=2020/10/31" ・上手くいかない Criteria1:="<=sLast " アドバイス頂戴できますと幸いです。 Sub 期限管理() Dim sLast As Date sLast = DateSerial(Year(Date), Month(Date) + 3, 0) With Worksheets("Sheet1").Range("A1") .AutoFilter Field:=14, Criteria1:="<= sLast " .CurrentRegion.SpecialCells(xlVisible).Copy .Worksheets("期限管理").Range("A1") .AutoFilter End With Worksheets("期限管理").Activate End Sub

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1579/2414)
回答No.1

””で囲まれるとsLastは変数として認識してくれないので。 Criteria1:="<=" & sLast で試してみてください。

tetsuya0125
質問者

お礼

解決しました!勉強になりました。有難うございます!

関連するQ&A

  • VBA 変数について

    VBA初心者でございます。 VBAでgrpという変数を設定し、それをキーにしてオートフィルタをしたいです。 以下のコードではエラーがでてしまうのは、なぜでしょうか? どうぞ宜しくお願いいたします。 Sub 絞り込み2() Dim grp Set grp = Worksheets("リスト").Cells(3, 2) Worksheets("マスタ0701").AutoFilterMode = False With Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") '.AutoFilter End With End Sub

  • VBA関数

    PC ほぼ素人です。ネットで調べて、下記のコードを作成できました。 バージョンは2007 Sub 抽出() Worksheets("Sheet5").Activate Worksheets("Sheet5").Range(Cells(1, 1), Cells(328, 18)).Clear With Worksheets("Sheet3").Range("A8") .AutoFilter Field:=1, Criteria1:=Worksheets("Sheet3").Range("a2") ''(1) .AutoFilter Field:=2, Criteria1:=Worksheets("Sheet3").Range("b2") ''(1) .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("Sheet5").Range("A1") ''(2) .AutoFilter ''(3) End With Worksheets("Sheet5").Activate End Sub Sheet5に抽出後、そのデータを書き換え Sheet3へ戻したいのですが可能なのでしょうか?      A  B      C     D      E      F      G   1  月  日   得意先   前回    数量    今回    数量   2  3   5    A商事   1月15日   2     2月5日   3   抽出後、Sheet3には、ABDEFGを戻したいのです。 説明不足かもしれませんが、どうか宜しくお願い致します。   

  • <excel:VBA>変数を使って簡略化したい

    google検索してなんとか自力で作ったVBAを下記に貼りました。 きちんと動作はするのですが、せっかくなので変数を使って簡素化し、 データが多くても動作が速くなるようにしたいのです。 いろいろ試しましたが、変数の使い方の知識が乏しく、うまくいきませんでした。 変数としたいのは■マークの2箇所になると思います。 詳しい方、力を貸していただけないでしょうか。 どうぞよろしくお願いいたします。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Sub オートフィルタ貼付作業() With Sheets("データ").Range("A3") Application.ScreenUpdating = False Range("AA3:EK3").AutoFilter .AutoFilter Field:=1, Criteria1:="1" ’■Fieldが1ずつ増えていく Range("AA3").Copy Range("Z3") ’■AA3が1列ずつ右へずれていく .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter Range("AA3:EK3").AutoFilter .AutoFilter Field:=2, Criteria1:="1" Range("AB3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter ~~~~~~~~~~~~ 115列分のデータがあり 下記まで同じようにつづきます ~~~~~~~~~~~~ Range("AA3:EK3").AutoFilter .AutoFilter Field:=115, Criteria1:="1" Range("ek3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter End With Application.ScreenUpdating = True Sheets("貼付").Activate Cells.Columns.AutoFit End Sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

  • エクセルVBA:コピーの貼り付け先

    VBA初心者です。よろしくお願いします。 あるデータベースをセルB2に入力されている値で絞込み、 シート2に貼り付けるとき、下記の(1)がおそらく正解だと思いますが、 ★(質問1) (2)でも同じ結果が得られました。コピー先の目的地を示す「Destination:=」の部分は省略して全く問題なしと考えてよろしいのでしょうか? ★(質問2) (3)で試してみても同じ結果が得られました。range("sheet2!A1") なんて書き方は、たまたま、試してみたらできちゃった(同じ結果が得られた)のですが、使い方として問題ありませんか? ------------------------------------------------------------- (1) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (2) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (3) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Range("Sheet2!A1") .AutoFilter End With End Sub

  • VBA のオートフィルタについて

    ExcelVBA初心者でございます。 2点質問がございます。 (1)エクセルVBAのオートフィルタの機能を使い、"マスタ0701"シートの13行目が”ABC”の行を、"検索結果"というシートにコピーしたいです。 以下のマクロを実行しますと、まず"マスタ0701"のB1のセル(13行目はブランク)がコピーされ、その下に13行目が”ABC”に該当する行がコピーされます。 なぜ、B1セルまでコピーされるのかご教示頂けますと幸いです。 (2)また検索結果だけでなく、オートフィルタのタイトル行もコピーするようにするにはどうしたら良いでしょうか? よろしくお願いいたします。 Sub 絞り込み() With Worksheets("マスタ0701").Range("A1") .AutoFilter Field:=13, Criteria1:="ABC" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") .AutoFilter End With End Sub

  • Execl2007のVBAの質問です

    度々申し訳ありませんが、何卒またお教えください。 下記の様なコードを書いたのですが、 オートフィルタの解除ができません。 何故なんでしょうか? ちなみに、ある任意の日付の行だけを抽出して 別のシートにコピー・プリントアウト を自動化するマクロを作りたいと思っています。 他にもコードに問題などありましたら 指摘いただけると幸いです。 よろしくお願いします。 ---------------------------------------------------------------- Sub macro2() 'macro test 2 Dim yyyymmdd As Date yyyymmdd = InputBox("印刷したい日付を入力して下さい。", "印刷日入力") With Worksheets("結果") .ListObjects("リスト1").Range.AutoFilter Field:=1, Criteria1:=yyyymmdd .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("貼り付け用紙").Range("A1") End With 'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" Worksheets("結果").AutoFilterMode = False Application.CutCopyMode = False Worksheets("貼り付け用紙").Range("A1:AM100").ClearContents End Sub

  • 下記マクロの意味を教えてください。

    Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。

  • EXCEL VBA を教えて下さい。

    EXCEL VBA で 業務毎に(A業務、B業務、C業務)、 担当者のメールアドレスを抽出するツールを 作りたいです。 <Sheet1>    A列   B列   C列   D列   E列    氏名  メアド  A業務  B業務  C業務    111   111@aaa   to   cc   bcc    222   222@bbb   cc   bcc  to    333   333@ccc   bcc  to   cc    444   444@ddd   to   cc   bcc もしも、A業務のセルををクリックしたら、、、 Sheet2に下記のように表示するものを作りたいです。 <Sheet2> to:    111@aaa,444@ddd cc:    222@bbb bcc:   333@ccc なんとか下記まで書いてまましたが、知識が未熟な為、行き詰っています。 Sub Macro03() With Worksheets("Sheet1").Range("A1") .AutoFilter Field:=3, Criteria1:="to"   ( B列の対象メアドをカンマで連ねてコピーしたいのですがわからないです) .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("Sheet2").Range("B2").PasteSpecial Paste:=xlValues, Transpose:=True .AutoFilter End With Worksheets("Sheet2").Activate End Sub VBAの優秀な方、 どうか教えて下さいますよう、宜しくお願い致します。

  • VBAがうまく動きません。

    エクセルVBAで実行時は正確に動かないが、ステップインでは正常に作動するのはなぜですか? 入力シートに入力された情報を元にデータシートから抽出を行い、新規シートを開き、そこでリストにしたい情報のみを編集(不要なタイトル行などの削除)して、自動で貼り付けと名前の定義を行うマクロを作っています。 ステップイン[F8]や実行[F5]では正常に作動するのですが、実際に使用してみると、抽出データが貼り付けされていない状態(セルは空白)となりますが、名前の定義は抽出データと同じ行まで定義されているので、貼り付けのみ上手くいっていないように思われます。 下記が作成したコードです。情報が足りないようでしたら、申し訳ありません。 お手上げ状態となっていますので、お力添えいただけると幸いです。 Dim syurui as String Dim suuryou as Integer Dim target as Range Private Sub Worksheet_Change(ByVal target As Range) If Intersect(target, Range("D7")) Is Nothing Then Exit Sub Else Call 抜出 End If End Sub Sub 抜出() Worksheets("データ").Activate ’後に出てくる名前初期化でエラーを防ぐため仮定義 ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets("データ").Range("K2") syurui = Worksheets("入力").Range("D9").Value Worksheets("データ").Select Set target = Worksheets("データ").Range("M2") With Worksheets("データ").Range("D1") .AutoFilter field:=4, Criteria1:=syurui .CurrentRegion.SpecialCells(xlVisible).Copy With Worksheets.Add .Paste ’不要な行を削除 .Rows(1).Delete .Range("A:D").Delete .Range("B:F").Delete ’抽出した情報を貼り付け&新規シート削除 .UsedRange.Copy target Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With .AutoFilter End With ’抽出データの最終行を調べる suuryou = Worksheets("データ").Cells(65536, "M").End(xlUp).Row If suuryou = 1 Then Worksheets("入力").Activate Exit Sub Else Range("番号").Name.Delete ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets(”データ").Range("M2:M" & suuryou) End If Worksheets("入力").Activate End Sub

  • excelVBAで年をインプットボックスにする

    オートフィルタで月ごとのシートにデータを振り分けるVBAを書いたのですが、毎年使えるようにしたいと思います。 現在のものが↓です。(4月分のみ。あとは繰り返し) Sub month()   With Worksheets("Sheet1")     .Range("A1").AutoFilter _       Field:=7, _       Criteria1:=">=2010/04/01", Operator:=xlAnd, _       Criteria2:="<2010/05/01"     .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _       Worksheets("Sheet2").Range("A1")   End With   Worksheets("Sheet2").Activate   Columns("A:AK").EntireColumn.AutoFit End Sub これをインプットボックスを使って、2011と入れると、2011年度の月ごとに抽出するようなVBAはどのように組めばいいのでしょう。 年度なので、1月~3月の設定とうるう年になったときに文字動的に日にちが変わるようにするにはどうするのかよくわかりません。 よろしくお願いします。