チェックボックスにマクロを登録したのですが、
チェックボックス17のはずが エラーになってしまいます。
おそらく定義をしなくちゃいけないんだろうと思うんですけど、
定義の仕方がわかりません。
ご存知の方、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

If CheckBox17.Value = 1 Then を



If CheckBoxes("CheckBox17").Value = 1 Then

と変えてみてください。(これで動きました)私のExcelは2000ですが、チェックボックスを貼り付けると名前は『チェック 1』(VBA内ではCheck Box 1)とかになります。『CheckBox17』は後から付けた名前でしょうか。(Excel97はそうだったかもしれませんが)


別法として、チェックボックスを右クリック→コントロールの書式設定→コントロールタブで『リンクするセル』を登録します。これを例えばセルF5として、

If Range("F5") = True Then
(このコードはチェックボックスのあるシートのコードウインドウに書いた場合です)

としても同じ結果でしょう。これはチェックボックスの名前は関係なくなります。
リンクするセルについては、リンクするセルをチェックボックスが配置されているセルにして、チェックボックスを右クリック→コントロールの書式設定→色と線タブで塗りつぶしの色を自動にする方法もあります。
    • good
    • 0
この回答へのお礼

ありがとうございますっ
やってみますっ

お礼日時:2002/02/04 11:27

質問の内容がもう少し明確になれば考えることができますが・・・


(1)該当のソフトは何でしょうか(Excel?)
(2)そのソフトのバージョンは(97とか2000とか)
(3)チェックボックス17と書いてありますが、Excelだとすれば
   a.表示→ツールバー→フォームのチェックボックス
   b.表示→ツールバー→Visual Basicのコントロールツールボックスのチェックボックス
   のどちらでしょうか。
(4)『エラーになってしまいます』とありますが、
   a.マクロの登録がエラー
   b.登録後にマクロを実行したらエラー(マクロ内部でのエラー)
   のどちらでしょうか。
(5)上記(1)~(4)が明らかになっても、実際のマクロの内容が分からなければ
   答えようがないかもしれません。

間違いを承知で予測をすると、Excel97か2000あたりでフォームのチェックボックスを使っているのではないでしょうか。
これは数年前には使っていましたが、参照したりする時に面倒だった記憶があります。個人的にはフォームのコントロールは特別なことがなければ使わないようにしています。古いし、Helpでも調べにくいし解説書もあまりないように思います。
コントロールツールボックスの方が調べやすいし使用例もたくさん紹介されています。こちらなら質問のようなことは起きないかもしれません。

この回答への補足

状況としては、フォームのチェックボックスの戻り値が1の場合、あるシートを
表示するというマクロ(以下)
If CheckBox17.Value = 1 Then
Sheets("入力画面").Visible = True
Else
Sheets("入力画面").Visible = False
End If

エラー部は、CheckBox17.Valueです。
おそらくCheckBox17が悪いと思われます。
そのチェックボックスはCheckBox17であることは
違いないのですが、そのまま利用することはできない
ということでしょうか?

補足日時:2002/02/03 21:49
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

Qエクセルのマクロを用いてチェックボックスをまとめてチェックする方法

エクセルを用いてチェックボックスが縦に並んだ書類を作っているのですが、チェックする項目のパターンが決まっているので毎回同じところにチェックするのが面倒です。
ワンクリックで複数のチェックがかけられるようにしたいのですが、
ツール→マクロ→新しいマクロの記録 で複数のチェック「レ」ができるようにマクロのを登録してみたのですがチェックがかかりません。
何かよい方法は無いでしょうか?

Aベストアンサー

こんばんは。

全部チェック

Sub Test1()
'フォームツール
 ActiveSheet.CheckBoxes.Value = True
End Sub

Sub Test2()
'コントロールツール
  Dim ctrl As Object
  For Each ctrl In ActiveSheet.OLEObjects
    If TypeOf ctrl.Object Is MSForms.CheckBox Then
      ctrl.Object.Value = True
    End If
  Next ctrl
End Su

個別にチェック

Sub Test1a()
'フォームツール
 ActiveSheet.CheckBoxes(Array(1, 3, 5)).Value = True
End Sub

Sub Test2a()
'コントロールツール
  Dim i As Variant
  For Each i In Array(1, 3, 5)
    ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = True
  Next i
End Sub

なお、シートモジュールの場合は、ActiveSheet. は不要です。

こんばんは。

全部チェック

Sub Test1()
'フォームツール
 ActiveSheet.CheckBoxes.Value = True
End Sub

Sub Test2()
'コントロールツール
  Dim ctrl As Object
  For Each ctrl In ActiveSheet.OLEObjects
    If TypeOf ctrl.Object Is MSForms.CheckBox Then
      ctrl.Object.Value = True
    End If
  Next ctrl
End Su

個別にチェック

Sub Test1a()
'フォームツール
 ActiveSheet.CheckBoxes(Array(1, 3, 5)).Value = True
End Sub

Sub Test2a()...続きを読む

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qエクセルのマクロを用いてチェックボックスをまとめてチェックする方法(その2)

「エクセルを用いてチェックボックスが並んだ書類があります。チェックする
 項目のパターンが決まっているので、毎回マウスを移動してチェックするの
 が面倒です。ワンクリックで複数のチェックがかけられるようにしたい
 のですが、よい方法は無いでしょうか?」

ほぼ類似の質問で、以前、別の人の質問

https://oshiete.goo.ne.jp/qa/3676289.html

に対してベストアンサーで示されていますが、これは、同一ブックの同一シートなどから
は対応できます。しかし、今回は会社の既存の帳票にマクロ(VBA)を埋め込まずに処理
したいので、別のブックにマクロ(VBA)を作成して処理したいと考えています。当該
コードを下記のようにアレンジしてみましたが、うまくいきません。


(例)
話の簡単のために、まずはチェックボックスのチェックを一括で外すことを試みます。

【帳票.xlsx】
 例えば、ワークシートにチェックボックス(開発のデザインタブから貼り付けたもの)
 が5個並んでいます。このうち、数個に既にチェックがついています。
 
【マクロ埋め込み.xlsm】
 Sub Check_Off_All()

Dim wsKitReq As Worksheet
Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")

'コントロールツール
Dim ctrl As Object
For Each ctrl In wsKitReq.OLEObjects
If TypeOf ctrl.Object Is MSForms.CheckBox Then
ctrl.Object.Value = False
End If
Next ctrl

End Sub


上のようにすると、実行後に「ユーザー定義型は定義されていません。」が出てしまいます。

(*1) For Nextの行を外すと処理できますが、ワークシート内に他のオブジェクト(例えば、
テキストボックスがあると、[False]のように表示されてしまうのでチェックボックスだけ
を抽出して処理することは必須になります。

(*2) ちなみに全く同様のコードを【帳票.xlsx】のsheet1にワークシートマクロとして埋め
込むと全く問題なく動きますので、コーディングが根本的に誤っているとは考えにくい
ところです。

「エクセルを用いてチェックボックスが並んだ書類があります。チェックする
 項目のパターンが決まっているので、毎回マウスを移動してチェックするの
 が面倒です。ワンクリックで複数のチェックがかけられるようにしたい
 のですが、よい方法は無いでしょうか?」

ほぼ類似の質問で、以前、別の人の質問

https://oshiete.goo.ne.jp/qa/3676289.html

に対してベストアンサーで示されていますが、これは、同一ブックの同一シートなどから
は対応できます。しかし、今回は会社の既存の帳票にマクロ...続きを読む

Aベストアンサー

こんにちは。

直してみました。
原因は、TypeOf は、そのオブジェクトの上位のクラスを読むものですが、他ブックからですと、共有していませんから、そのクラスを見つけることができないからだと思います。間違った考えかもしれませんが、例えでいうなら、親が誰かわかっているところで、その子供の親を識別できるけれども、子供だけだと、誰の親か分からない、という所ではないでしょうか。

'//
Sub Check_Off_All()
'No. 9059904
 Dim ctrl As Object
 Dim wsKitReq As Worksheet
 Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")
 'コントロールツール(OleObjects)
 For Each ctrl In wsKitReq.OLEObjects
 If TypeName(ctrl.Object) = "CheckBox" Then
  ctrl.Object.Value = False
 End If
 Next ctrl
End Sub

'決まった所にチェックを入れる

Sub Test2b()
 ''No. 9059904-2
  Dim i As Variant
  Dim wsKitReq As Worksheet
  Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")
  For Each i In Array(1, 3)
    wsKitReq.OLEObjects("CheckBox" & i).Object.Value = True
  Next i
 End Sub
'///

参考:
https://msdn.microsoft.com/en-us/library/s4zz68xc.aspx

こんにちは。

直してみました。
原因は、TypeOf は、そのオブジェクトの上位のクラスを読むものですが、他ブックからですと、共有していませんから、そのクラスを見つけることができないからだと思います。間違った考えかもしれませんが、例えでいうなら、親が誰かわかっているところで、その子供の親を識別できるけれども、子供だけだと、誰の親か分からない、という所ではないでしょうか。

'//
Sub Check_Off_All()
'No. 9059904
 Dim ctrl As Object
 Dim wsKitReq As Worksheet
 Set wsKitReq = Workbook...続きを読む

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

Qエクセルのチェックボックスで3つあるうち1つチェック入れたら自動的に残りにチェック出来ないようにするには

エクセルのチェックボックスで3つあるうち1つチェック入れたら自動的に残りにチェック出来ないようにするにはどうすればよいですか?今日始めてチェックボックスを触りました…

Aベストアンサー

チェックボックスにする必要あるのかな?
そうした、単一のものしか洗濯できないのであれば
ユーザインターフェースとしてはラジオボタン(オプションボタン)
の方が適切に思えるけれど・・・。

さて、質問の件ですが、チェックボックスのクリックイベントで
EnabledプロパティをFalseに設定するとチェックが出来なくなり
Trueにするとチェックが出来るようになります。

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

QExcel マクロでチェックボックスに枠線

エクセルマクロについて教えて下さい。

Excel2003を使用しています。
1つのシートに、フォームツールボックスからチェックボックスを沢山(300個以上)配置しました。

チェックボックスをクリック(オン)するのと同時にチェックボックスに赤い枠線を付けたいのですが、1つのマクロでチェックボックスのオブジェクト名を取得しながら枠線を付けることは出来ませんでしょうか?

以下のマクロを試してみたのですが、Application.Callerの所でエラーになってしまいました。

Sub checkon()

ActiveSheet.Shapes(Application.Caller).Select

Selection.ShapeRange.Line.Weight = 3#
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10

i = ActiveCell.Address(False, False, xlA1)

Range(i).Select

End Sub

特定のチェックボックスを指定した場合は、問題ないのですが・・。
(例)ActiveSheet.Shapes("Check Box 1").Select

どなたか詳しい方、宜しくお願い致します。

エクセルマクロについて教えて下さい。

Excel2003を使用しています。
1つのシートに、フォームツールボックスからチェックボックスを沢山(300個以上)配置しました。

チェックボックスをクリック(オン)するのと同時にチェックボックスに赤い枠線を付けたいのですが、1つのマクロでチェックボックスのオブジェクト名を取得しながら枠線を付けることは出来ませんでしょうか?

以下のマクロを試してみたのですが、Application.Callerの所でエラーになってしまいました。

Sub checkon()

Active...続きを読む

Aベストアンサー

#1です。
ついでですが、クリック時にいちいちCheckboxをSelectしなければ、
i = ActiveCell.Address(False, False, xlA1)
Range(i).Select
は不要ですね。またCheckBoxを再度クリックしてオフにした場合は枠線を赤から戻したいのではないですか?
サンプルです。↓

Sub checkon02()
With ActiveSheet.Shapes(Application.Caller)
.Line.Weight = IIf(.DrawingObject.Value = xlOn, 3#, 1#)
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoTrue
.Line.ForeColor.SchemeColor = IIf(.DrawingObject.Value = xlOn, 10, 0)
End With
End Sub

#1です。
ついでですが、クリック時にいちいちCheckboxをSelectしなければ、
i = ActiveCell.Address(False, False, xlA1)
Range(i).Select
は不要ですね。またCheckBoxを再度クリックしてオフにした場合は枠線を赤から戻したいのではないですか?
サンプルです。↓

Sub checkon02()
With ActiveSheet.Shapes(Application.Caller)
.Line.Weight = IIf(.DrawingObject.Value = xlOn, 3#, 1#)
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
...続きを読む

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

Qエクセルマクロでチェックボックスを作成する方法

下記の方法でExcel起動時にE1~E50にチェックボックスを
作成しています。
(F列にはチェックの結果を表示させています)

Sub Auto_open()
Dim i As Integer
Dim cbx As CheckBox
With Selection.Parent
For i = 1 To 50
Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _
Top:=Cells(i, 5).Top, _
Height:=Cells(i, 5).Height, _
Width:=Cells(i, 5).Width)
cbx.Text = ""
cbx.LinkedCell = "F" & i
cbx.Display3DShading = True
Next i
End With
Set cbx = Nothing
End Sub

チェックボックスにチェックされたら
チェックされた行のA~Dの色を変更したいのですが、
どのようにやるのか分からなく困っています。
(チェックボックスのクリックイベントを50個つくるわけにも
いかないですし・・・)

何か少しでもアイデア等ございましたら
ご教授お願いします。

下記の方法でExcel起動時にE1~E50にチェックボックスを
作成しています。
(F列にはチェックの結果を表示させています)

Sub Auto_open()
Dim i As Integer
Dim cbx As CheckBox
With Selection.Parent
For i = 1 To 50
Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _
Top:=Cells(i, 5).Top, _
Height:=Cells(i, 5).Height, _
Width:=Cells(i, 5).Width)
cbx.Text = ""
...続きを読む

Aベストアンサー

方法1:
Sub Macro1()
 Dim cbx As CheckBox

 Set cbx = ActiveSheet.CheckBoxes.Add( _
  Top:=Range("E1").Top, _
  Left:=Range("E1").Left, _
  Width:=Range("E1").Width, _
  Height:=Range("E1").Height)
 cbx.Text = ""
 cbx.Display3DShading = True
 cbx.OnAction = "チェック1_Click"

 Range("E1:E50").FillDown
End Sub

Sub チェック1_Click()
 With ActiveSheet.Shapes(Application.Caller)
 .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = _
 IIf(.ControlFormat.Value = 1, 4, xlNone)
End With
End Sub
とかなんとか。


方法2:
>F列にはチェックの結果を表示させています
これを拾って反応する条件付き書式をA:D列に施しておくのでも。

方法1:
Sub Macro1()
 Dim cbx As CheckBox

 Set cbx = ActiveSheet.CheckBoxes.Add( _
  Top:=Range("E1").Top, _
  Left:=Range("E1").Left, _
  Width:=Range("E1").Width, _
  Height:=Range("E1").Height)
 cbx.Text = ""
 cbx.Display3DShading = True
 cbx.OnAction = "チェック1_Click"

 Range("E1:E50").FillDown
End Sub

Sub チェック1_Click()
 With ActiveSheet.Shapes(Application.Caller)
 .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = ...続きを読む


人気Q&Aランキング

おすすめ情報