• ベストアンサー

変数にいれる値

n-junの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

MsgBox TypeName(.Cells(list_cnt, intBASE).Value) ' tugi = 0 + Month(.Cells(list_cnt, intBASE)) コメントにする Stop ' 一時中断 としてみて .Cells(list_cnt, intBASE) が本当に日付型であれば"Date"が表示されますが、それ以外であればエラーの要因と絞れるでしょう。 もしDateにならなく、且つ日付(シリアル値)で間違いないのであれば tugi = Month(.Cells(list_cnt, intBASE).Value2) とプロパティを明確にすることです。 或いはセル値に日付以外が含まれる場合があるのであれば、日付であるか判定した後、 代入する値を決めればいい。 例えば日付でない時は"0"とするのなら、 tugi = IIf(IsDate(.Cells(list_cnt, intBASE)), Month(.Cells(list_cnt, intBASE)), 0) とか。

maki06
質問者

補足

n-junさん 返信ありがとうございます。 プログラムは私が作成したものではないのですが、修正しなければ ならない環境にあります。 ある程度長さがあるので端折って掲載したいのですが、どこまで端折っていいのやら。。 >tugi = IIf(IsDate(.Cells(list_cnt, intBASE)), Month(.Cells(list_cnt, intBASE)), 0) こちらですがエクセルVBAなので tugi = If(IsDate(.Cells(list_cnt, intBASE)), Month(.Cells(list_cnt, intBASE)), 0) としたのですが赤く反転して実行できません。 これは取得したデータが日付ならそのまま、その月を反映させそうでなければ0を代入するとうことですよね?

関連するQ&A

  • VBA 得意先ごと且つ日付ごとに数値を集計したい

    あるエクセルシートを自動処理するVBAを作成しようとしています。 シートの内容は A日付列 B得意先コード列 C金額列 20091001 000001 \1,000 20091001 000001 \1,500 20091002 000002 \800 20091002 000001 \1,200 といった感じです。 これを、指定した日付で、且つ得意先コード毎に集計したいと考えています。(上記の例だと、コード000001得意先は20091001で\2,500、20091002で\1,200といった具合です) 現在、日付毎で集計するところまでは作成できたのですが、ここから得意先別で集計するにはどのようにコーディングすればよいでしょうか。 日付毎の集計は以下のようにしています。 cnt = 2 Total = 0 Do Until False '行が底に達したらループを終了します If Range("D" & cnt).Value = "" Then Exit Do End If     'D列の日付と指定の日付が合致したら If yearmonthday = Range("D" & cnt).Value Then 'L列の金額を取得しカウント Total = Total + CDbl(Range("T" & cnt)) '次の行を検索するための行数カウント cnt = cnt + 1 Else cnt = cnt + 1 End If Loop ご存知の方、どうぞ教えてください。

  • 制御方法について

    所属名毎にシートを作成し都道府県と所属名が一致したら集計させループさせたいのですがうまくいきません。 データには列135に所属名があり139に都道府県が入っています。 解約シートには6行目5列目から都道府県名が入っています。 最終が沖縄となるので沖縄が入れば抜けるようになっています。 今の状態で実行すると所属名の数毎、都道府県の件数を更にを集計してしまいます。 一度シートを作成した所属はFor~Nextを読み込まないようにしたいのですが 自分なりに制御させようと試みましたが上手く集計されません。 何かアドバイス等ありましたらお願いします。 Dim ingcnt As Integer Dim intHjn As Integer Dim strhjn As String Dim Areastrhjn As String Dim list_cnt As Integer Dim Arealist_cnt As Integer Dim (2) As Worksheet Dim Area_cnt As Integer With Worksheets("解約データ") Set (2) = Sheets("解約・所属別") list_cnt = 2 strhjn = "" Area_cnt = 5 '所属CD1毎のシート作成 Do While Trim$(.Cells(list_cnt, 1)) <> "" '(A列)が空白でない限り繰り返す If strhjn <> .Cells(list_cnt, 135) Then strhjn = .Cells(list_cnt, 135) Sheets("解約").Select Sheets("解約").Copy Before:=Sheets("解約") Sheets("解約(2)").Name = strhjn ActiveSheet.Cells(1, 15) = strhjn End If For Area_cnt = 5 To (2).Cells(6, (2).Columns.Count).End(xlToLeft).Column Area = (2).Cells(6, Area_cnt) Arealist_cnt = 2 Areastrhjn = "" Do While Trim$(.Cells(Arealist_cnt, 1)) <> "" '(A列)が空白でない限り繰り返す Areastrhjn = .Cells(Arealist_cnt, 135) 'エリア集計 If Areastrhjn = .Cells(Arealist_cnt, 135) And _ .Cells(Arealist_cnt, 139) = Area Then ActiveSheet.Cells(7, Area_cnt) = ActiveSheet.Cells(7, Area_cnt) + 1 End If Arealist_cnt = Arealist_cnt + 1 Loop If Area = "沖縄" Then Exit For Next list_cnt = list_cnt + 1 Loop End With End Sub

  • VBAで値の取得

    VBAで値の取得 osはxp エクセル2000です。 エクセルのシートに計算した値をVBAで入れたいと思います。 行数は変動します。 入れたい値は金額×数値です。なので切捨てになります。 計算式は  F3=TRUNC(1250*B3)+TRUNC(1000*C3)+TRUNC(1000*D3)+TRUNC(1250*E3) 添付のエクセル画面を参考にして下さい。 私が考えたもので、これからどのように変更すれば値の取得ができるでしょうか? Dim LastR As Long, Cnt As Long '最終行と行番号 LastR = Range("B65536").End(xlUp).Row For Cnt = 3 To LastR 'B3から最終行まで Cells(Cnt, 6).Formula = "=TRUNC(1800 * Cells(Cnt, 2)) + TRUNC(1350 * Cells(Cnt, 3))"    Next (もちろんエラーになります。)

  • エクセル リストボックスにセルの値を表示したい

    Sheet1に A1 a A2 i A3 u と入力されています。 フォームのリストボックスにこの3つのセルを表示したいのですが Private Sub UserForm_Initialize() UserForm1.ListBox1.ControlSource = Sheets("Sheet1").Range(Cells(1, 1), Cells(1, 3)) End Sub ではうまく行きません。 デバッグしてもなにも引っかからないのですが 実行すると 「実行時エラー13 型が一致しません」 となります。 「ControlSource」を「RowSource」に変えても同じでした。 ※列が移動するため列番号を変数で取得したいのでCellsを使用しています。 ご教授よろしくお願いします。

  • VBAの定義と印刷について

    VBAで下記の様に定義をして印刷していますが、sheet"AAA","BBB"と同じく 新しいsheet"DDD"もの一緒に印刷したい場合の定義はどうなるのでしょう!教えて頂けますでしょうか。 よろしくお願いします。 別sheetの"sheet1"A列 AAA,BBB,CCC          B列 1,2,3  として印刷フラッグがある。 VBAでは Sub sheet1印刷() CNT = 4 CNT1 = 1 CNT2 = 1 TAKE = 0 CK = 30 Do Until CNT2 = CNT Do Until CNT1 = 4 If Sheets("sheet1").Cells(CNT1, 1) = Sheets("sheet1").Cells(CNT2, 3) Then TAKE = Sheets("sheet1").Cells(CNT1, 2) Select Case TAKE Case 1: Sheets("AAA").PrintOut Copies:=1 Case 2: Sheets("BBB").PrintOut Copies:=1 Case 3: Sheets("CCC").PrintOut Copies:=1 End Select CNT1 = 1 Exit Do Else: CNT1 = CNT1 + 1 End If Loop CNT2 = CNT2 + 1 Loop End Sub

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • ワークシート名を変数に格納する方法

    VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか? 下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。 Dim データ行 As Integer Dim cnt As Integer Dim データ数 As Integer cnt = 4 データ行 = Cells(Rows.Count, 8).End(xlUp).Row For データ数 = 11 To データ行   If Worksheets("入力").Cells(データ数,1).Value= "2"Then Worksheets("H").Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value Worksheets("H").Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value Worksheets("H").Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value Worksheets("H").Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value Worksheets("H").Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value Worksheets("H").Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value Worksheets("H").Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value Worksheets("H").Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value Worksheets("H").Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value Worksheets("H").Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value cnt = cnt + 1 End If Next データ数

  • EXCELのマクロで一覧表にハイパーリンクを付ける方法?

    EXCELで,簡単なカード型DBを作りたいので 以下のような一覧シートを作るマクロを作ったのですが シート名のセルにそのデータセルへのハイパーリンクを設定する方法がわかりません list_sheet.Cells(10 + cnt, 5).HyperLink = now_sheet.name & "!" & A9 とでもすればいいのでしょうか? どなたかよい方法を教えてください 以下は,自作マクロの一部です cnt = 0 For ix = 1 To Worksheets.Count Set now_sheet = Worksheets(ix) If now_sheet.Name <> "一覧" And InStr(1, now_sheet.Name, "Sheet") <> 1 Then cnt = cnt + 1 list_sheet.Cells(10 + cnt, 5) = now_sheet.name list_sheet.Cells(10 + cnt, 5).HorizontalAlignment = xlHAlignCenter list_sheet.Cells(10 + cnt, 6) = Format(now_sheet.Cells(5, 2), "yyyy/mm/dd") End If Next ix

  • エクセル2002を2003で実行させたい。

    エクセル2003で作成したものを修正したのですが 実行できなかったので2002で試してみたら実行できました。 VBAにはあまり詳しくなのですが、列を左に3列ずらすという だけのものなのでプログラムの中の記述で  tugi = 3 + tuki の3をとり tugi = tuki としただけのものです。 2002では実行できるのですが、これを2003で実行させようとすると 「型が違います」とエラーがでてしまいます。 何かアドバイスがありましたら宜しくお願いします。

  • Excel上で関数を入れるコード For Next

    C列にExcel上で関数を上から下へ入れるコードを教えて下さい。 お世話になっています。 いつも質問ばかりですみません。 A列に項目、B列に日付が入っているリストがあります。 今回、C列にその月の第何周目かを求める関数 =WEEKNUM(B1)-WEEKNUM(DATE(YEAR(B1),MONTH(B1),1))+1 を入力したいです。 このエクセルシート上の関数のB1をB2、B3、B4と変化させて行きたいのですが 以下私のコードを書きましたが、 記載した時点で「"=WEEKNUM」から二行が赤字で表示されてしまいます。 ------------------------------------------------------ Sub 私の書いた第何週目かをC列に求めるコード() Dim i As Integer For i = 1 To Range("a1").End(xlDown).Row Sheets("Sheet1").Cells(i, "3").Formula = _ "=WEEKNUM(" & "(Cells(i, 2)"&")-WEEKNUM(DATE(YEAR(" & "(Cells(i, 2)" &),MONTH(" & "(Cells(i, 2)" & "),1))+1)" Next i End Sub ------------------------------------------------------ 方法を教えていただけないでしょうか。 すみませんが、よろしくお願い致します。