• 締切済み

VBAでカウンターを設定しています

Range("A1") = (Range("A1") + 1) を作成しましたが初期値と最終値を設定するには どのようなマクロを追加すればよいのでしょうか

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.4の文面を入力している途中で回答No.3に対するお礼が投稿されていた事にしばらく気づきませんでした。 >1 A1セルにカウント数字を表示させたい。 >2 フォームボタンを作成 >3 フォームボタンを一回クリックでカウント数字が1上がる >4 初期値と最終値を予め、設定しておく >5 最終値を超えたとき、初期値に戻る という事でしたら以下の様にして下さい。  まず、「Microsoft Visual Basic for Applications」のウィンドウを開き、御質問のマクロを設定したいExcel bookの標準モジュールに以下のVBAのマクロの構文を入力して下さい。 Sub マクロの名称() With Range("A1") If Not IsNumeric(.Value) Then .Value = 1 ElseIf Int(.Value) <> .Value Or .Value > 19 Or .Value < 1 Then .Value = 1 Else .Value = .Value + 1 End If End With End Sub  次に、フォームコントロールボタンを作成し、そのボタンに上記のマクロを登録して下さい。  以上です。

ab8102
質問者

お礼

kagakusukiさん、当方の意図を十分にお伝えできず、申し訳ございませんでした。ご教授のとおり、おこないましたところ、完璧に動作しました。本当にありがとうございました。助かりました。感謝、感謝です。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

>貴殿のご説明の中の日本語注釈を省いて >以下のマクロにコピーをしました。 >Range("A1").Value = 1 >Do > If Then Range("A1").Value = Range("A1").Value + 1 > Loop While Range("A1").Value < 20 >エラーメッセージが出て動きません。  当たり前です。 >カウントが1進むのに必要となる条件 の部分は単なる注釈などではありません。  If~Then にはIfとThenの間に必ず条件を指定する式が必要であるのに、それを省略してしまっているのですから、質問者様がVBAの構文として成り立たない様に変えてしまっている訳です。  どの様な場合にカウントを進めるのかという条件に関して質問者様が何も説明していないため、仕方が無く >カウントが1進むのに必要となる条件 >の様な形式のマクロ という書き方をせざるを得ませんでしたが、「カウントが1進むのに必要となる条件」の部分に当てはまる式は、当然の事ながら「質問者様がどの様な場合にカウントを進めたいのか」という条件によって変わって来ます。  ですから、「質問者様が考えている『どの様な場合』」に合わせた条件式を質問者様が考えて、その条件式で >カウントが1進むのに必要となる条件 の部分を差し替える様にして下さい。  もし条件式を自力で考え出す事が出来ない場合には、「質問者様がどの様な場合にカウントを進めたいのか」を回答者にちゃんと説明する様にして下さい。  現状では、質問者様が状況や条件に関する必要な説明をしていない事が原因で、問題を解決するために必要不可欠な情報が不足しています。  それでは問題を解決する具体的な方法を提示する事など誰にも不可能です。 >当方VBAは初心者です。 と仰るのであれば、質問者様御自身は何をどうしたいのかという事を、正確に説明する様にして下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2です。  もし条件などは特になく、同じような処理を1回済ませるごとにカウントが必ず1ずつ進むようにする場合には、以下の様な型式のマクロにして下さい。 Dim i As Long For i = 1 To 20 カウント以外の処理 Range("A1").Value = i Next i

ab8102
質問者

お礼

当方の説明不足をお詫びいたします。 行いたいことを詳しく記述させていただきます。 1 A1セルにカウント数字を表示させたい。 2 フォームボタンを作成 3 フォームボタンを一回クリックでカウント数字が1上がる 4 初期値と最終値を予め、設定しておく 5 最終値を超えたとき、初期値に戻る   以上のマクロを設定したいのですが、、、、

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 追加するのではなく、以下の様な形式のマクロに変更された方が良いと思います。 Range("A1").Value = 1 Do カウント以外の処理 If カウントが1進むのに必要となる条件 Then Range("A1").Value = Range("A1").Value + 1 Loop While Range("A1").Value < 20

ab8102
質問者

お礼

ありがとうございます。当方VBAは初心者です。貴殿のご説明の中の日本語注釈を省いて 以下のマクロにコピーをしました。 Range("A1").Value = 1 Do If Then Range("A1").Value = Range("A1").Value + 1 Loop While Range("A1").Value < 20 エラーメッセージが出て動きません。トホホ。。。。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

初期値が1なら、 Range("A1") = 1 最終値が20なら、今のマクロを、 if Range("A1")<20 then Range("A1") = (Range("A1") + 1) だとか。

ab8102
質問者

お礼

ありがとうございます。早に試してみました。 Range("A1") = 5 if Range("A1")<20 then Range("A1") = (Range("A1") + 1) としてマクロを動かすと 6 で止まってしまいます。トホホ、、、です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでカウンタを作るマクロを教えてください

    行いたいことを記述させていただきます。 1 A1セルにカウント数字を表示させたい。 2 フォームボタンを作成 3 フォームボタンを一回クリックでカウント数字が1上がる 4 初期値と最終値を予め、設定しておく 5 最終値を超えたとき、初期値に戻る(制限なく)  例えば1000から2000までのカウントをおこない、2000を超えないで1000に戻る。 以上のマクロを設定したいのですが、、、、

  • エクセルVBAで困っています。

    Excell2003でマクロを作成したのですが、思うような結果が出なくて困っています。 どなたかお力をお貸しください。 お願いします。 【作成したマクロ】 Sub テスト()   myPath = ThisWorkbook.Path   buf = Dir(myPath & "¥データ¥" & "*.xls")   Do While buf <> ""     Target = "'" & myPath & "[" & buf & "]Sheet1'!R1C1"     i = i + 1     Cells(i, 1) = buf     Cells(i, 2) = ExecuteExcel4Macro(Target)     buf = Dir()   Loop End Sub 【設定状況】 ・デスクトップ上に "サンプル.xls" があり、ThisWorkBookに上記マクロを書きました。 ・デスクトップ上に "データ" というフォルダがあり、その中に、"Book1.xls" と "Book2.xls" があります。 ・"Book1.xls" のSheet1のRange("A1")には "あいうえお" が入力されています。 ・"Book2.xls" のSheet1のRange("A1")には "かきくけこ" が入力されています。 【マクロ実行結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ #REF! ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ #REF! となってしまいます。 【求めたい結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ あいうえお ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ かきくけこ よろしくお願いします。

  • EXCEL VBA コピー貼り付けについて

    はじめまして。 エクセルのマクロの記録でマクロ作成してますが、希望通りに張り付け出来ずにいます。 (1)張り付けた場所に関数がコピーされない。 (2)最終行にコピーする方法が解らない。 (3)印刷範囲の張り付けできない 皆様お忙しい中恐縮で申し訳ありませんがご教授お願い致します。 Sub コピー() ' Range("A1:AR68").Select Selection.Copy  Range("A69").PasteSpecial xlPasteAll 「最終行へ変更したい」 ActiveSheet.Paste 「関数も含めて貼り付けたい」  ・「印刷範囲をコピーしたい」   End Sub

  • エクセルVBAで

    A.xlsを開き、B.xlsも追加で開いた状態で、ウインドウAをアクティブにした状態でマクロを実行します。ウインドウAのB1の値を、ウインドウBのA1に入れたいので、 Windows("B.xls").Range("A1") = Range("B1") と書きましたが、エラーになります。どのように表記するのが正しいのでしょうか?

  • VBAの時間設定について教えてください

    質問1: VBAで、ある一定の時間だけ指定したマクロが実行されることは出来ますか? (例えば毎日16時30分~21時だけ"マクロA"が実行されるというような) ただ、16時30分にエクセルが開いているとは限らないので、もし開始される時間に開いてない場合でも、指定した時間内に1度でも開けば必ず実行されるのでしょうか? マクロAには Sub マクロA() If sheets("1").Range("A1").Value <>"" Then msgbox"このシートは使えません" Else End If End sub という命令を作っています。 質問2: SUB() EndSub で Private Sub Worksheet_SelectionChange(ByVal           Target As Range を開くことは出来ないのでしょか。 色々やってみたのですが出来ません。 すいません。初心者なので色々本を見ながら勉強していますが、なかなかうまく出来ません。 どなたか、教えてください。      

  • フィルタオプション設定をVBAで処理したものに、さらに連番(ナンバリング)もされるようにVBAを作成し直したい。

    よろしくおねがいします。 フィルタオプション設定を下記のようにVBAにて既に作成したものがあります。(ボタンをクリックするだけで、データが抽出されるようにしてあります。) Sub Macro1() Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets("職員名簿").Range("B65536").End(xlUp).Row myRow2 = Sheets("東京都").Range("B65536").End(xlUp).Row If myRow2 >= 5 Then Sheets("東京都").Range("B5:T" & myRow2).ClearContents End If Sheets("職員名簿").Range("A2:S" & myRow1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("A2:F32"), CopyToRange:=Range("B5:T5"), _ Unique:=False End Sub この実行時に、A列に抽出されたデータの件数を自動的に1からの連番にて入る(ナンバリングされる)ように、VBAを追加作成し直したいのですが、 どうしたら良いか分からず、教えていただきたいと思います。 既に作成してある、VBAを実行した後に、A列のセル一つ一つに、 =SUBTOTAL(3,B$6:B6) などのように、関数を入れて抽出した行分、コピーしていけばいいのではないか。とおっしゃるかもしれませんが、 作成は私の仕事なのですが、実際これを使っていくのは、私ではなく上司なので(エクセル超初心者で使いこなせない)、 データ抽出と同時に、A列に番号が連番されていくように、 ボタン一つで、データ抽出とナンバリングができるように、 VBAを追加作成し直したいのです。 どういう命令文を追加すればよろしいのでしょうか。 よろしくおねがいいたします。

  • VBA

    VBA 申し訳ございませんが行列操作がわかりません。 行数は一定ではありません。 ご意見をいただけませんか? (1) Sheet1そして、対象例A, Cは存在します。 ↓を実行するとエラーメッセージ"インディクスが有効範囲内にありません。"が表示されます。 理由が分かりません。 Worksheets("Sheet1").Range("A", "C").Copy (2) 変更前; (A列) 1 データ1 2 3 データ2 4 . . 変更後; (A列) 1 データ1 2 データ1 3 データ2 4 データ2 . データ2 . データ2 行数は一定ではありません。 ThisWorkbook.SaveAs Filename:="c:\xxxxxxxxx.xls" Workbooks("xxxxxxxxx.xls").Worksheets("Sheet1").Range("A", "C").Paste ワークブックを別名保管して新たに作成して、同列に変更値を反映します。 そして、A列には直前のセル値を新しいワークブックに反映してすべてのセルを埋めたいのですが定義が分かりません。 (3) 行数は一定ではありません。 最終行に行を追加したのですが定義が分かりません。 Application.CutCopyMode = False Range(?????).Insert (4) 変更前; (C列) 1 データ3 2 データ3 3 データ3 4 データ3 . データ3 . データ3 変更後; (C列) 1 データ3 2 データ3 3 データ3 4 データ3 . データ3 . データ3 . データ2 行数は一定ではありません。 (3)で追加した最終行のセルCにはA列の直前値を挿入したいのですが定義が分かりません。 (5) 行数は一定ではありません。 D列を新しいワークブックに作成します。 (D列) 1 ● 2 ● 3 ● 4 ● . ● . ▲ 追加した最終行の直前まではすべて●、最終行のセルには▲を挿入したいのですが定義が分かりません。 Application.CutCopyMode = False Range("D").Insert ?????

  • Excel VBAの繰り返し構文について

    A列に日付、B列に曜日、C列に休、D列に1直、E列に2直、という形の年間シフトを作成しています。 初期値としてA2セルに数字を入力→C列が空白の時だけD列に記入するマクロを作成したと思っています。 現在仮として、 Sub C列のセルが空白の行のD列に数値を入力() 下端行 = Range("A" & Rows.Count).End(xlUp).Row '下端検出 For 行 = 3 To 下端行 '1行目から下端行まで1行ずつ繰り返す If Range("C" & 行).Value = "" Then 'その行のC列のセルの値が空白の時 Range("A2").Copy 'A2をコピーする Range("D" & 行).PasteSpecial Paste:=xlPasteFormulas 'その行のA列のセルを起点に 'して数式を貼り付ける End If Next End Sub というマクロを置いていますが、「Range("A2").Copy」の部分を 「A2を初期値として、最初にC列が空白でなくなる時まで初期値を繰り返し、次にC列が空白になった場合は初期値+1の数をD列に入力する。 ただし初期値+1の最大数は6までとする(要するに1~6の繰り返しです)」 という感じに変更したいのですが、どうすればいいのかさっぱりです…。 VBAレベルはこの質問をする程度なのでかなり初級です。

  • VBA シングルクォーテーションと=の入力

    文字が入っているセルの前後にに文字を追加するマクロ ="=aaa"と入力したい ダブルクォーテーションとイコールを追加したいのですが ↓のとおり作ってみたもののうまくいきません。 range(a1).Value = " = " & """ " = " & .Value" これだとダメですか??

  • 【エクセル】 VBAでエラーが出てわかりません。。

    やりたいことは、関数をマクロでセルに記入してオートフィルで指定した行数まで伸ばしたいのです。 (すでに関数で作成したファイルがあるのですが、行数が多いため、とても重い。。^^;) まずマクロの記録で次のマクロを取得しました。 Sub Macro4() Range("C4").Select ActiveCell.Formula = "=SUM(A2:A10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C12"), Type:=xlFillDefault Range("C4:C12").Select Range("D11").Select End Sub そして、 Sheet2に貼り付けて > ActiveCell.Formula = "=SUM(A2:A10)" の"=SUM(A2:A10)"部分をちょっと長い関数ですが、 "=IF(ISERROR(INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1)),"",INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1))" と書き換えてマクロを実行すると「アプリケーション定義またはオブジェクト定義エラーです。」 というエラーが出てしまうんですが、どこを直せばわからないです。。 おかしいところを教えてください、よろしくお願いします。 わかり図らい説明かと思いますが。。この件(1行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。

このQ&Aのポイント
  • プリンターの廃インク吸収パッドの吸収量が限界に達しました。エラーコードが表示されたため修理を依頼したいのですが、修理の際にインクは取り外した状態で搬送してもらうのでしょうか?
  • EPSONのプリンター修理についてお聞きしたいです。廃インク吸収パッドの吸収量が限界に達し、エラーコードが表示されました。修理の際にインクは取り外した状態で搬送してもらうのか、教えてください。
  • プリンターの修理について教えてください。廃インク吸収パッドがいっぱいになり、エラーメッセージが表示されました。修理の際にインクを取り外した状態で搬送してもらうのでしょうか?
回答を見る