柔軟に働き方を選ぶ時代に必要なこと >>

ワークシート上に、フォームのオプションボタンが7個貼ってあります。
名前はOP1~OP7とします。
ある一定の条件に合致した場合、押されたオプションボタンがxlonになるのをキャンセルし、前にオンになっていたオプションを再度xlonにしたいのですが、Appication.Undoではエラーになってしまいました。
どうやったら前の状態に戻せるのでしょうか?

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

A 回答 (15件中1~10件)

こんにちは。



Application.Callerとは何とお洒落な。。(^o^)

------------------------------------------------------------------
Public myOpValues(7) As Integer 'これmyOpValues(7) ってどういう意味ですか?

●ひとつ前の7個のオプションボタンの状態を保持するための配列
-------------------------------------------------------------------
If n <> OpNo And myOpValues(n) = 1 Then 'このmyOpValues(N) はなんですか?

●配列myOpValues()にはひとつ前のオプションボタンの状態が入っているので元に戻すためにそこをチェックしています
---------------------------------------------------------------
    ActiveSheet.OptionButtons(n).Value = 1

●そしてここで元の状態に戻しています
----------------------------------------------------------------

   myOpValues(N) = 0 'このmyOpValues(N)=0 はどんな意味ですか?

●現在のオプションボタンの状態を配列に再設定する為に先ず、Offにしているだけです。

------------------------------------------------------------
   If N = OpNo Then myOpValues(N) = 1

●そしてここでいまクリックされたオプションボタンの状態"On"を配列に保持
-----------------------------------------------------------



ということになりますがある別の場合も考えていたのでちょと分かり難いコードになりました。
そこで単純に補足のようなことでよければ以下のようにシンプルにすることもできますね。
=========================================================

Sub OpCheck(OpNo)

 Dim N As Integer

 If ActiveSheet.CheckBoxes("CCK" & OpNo).Value <> 1 Then
   MsgBox "そこは選べないわよ。", vbCritical, "Sorry!!"

    For N = 1 To 7
      ActiveSheet.OptionButtons(N).Value = myOpValues(N)
    Next N
 End If

 For N = 1 To 7
   myOpValues(N) = ActiveSheet.OptionButtons(N).Value
 Next N
End Sub
============================================================


それから、こんな時はどうするのでしょう。
例えば、CCK3にチェック、OP3がONの状態の時、CCK3のチェックを外した場合、OP3はONのまま?それともOFFにする?

以上です。
 

この回答への補足

すみません、あとひとついいですか?

ActiveSheet.OptionButtons(n) ですが、現在はOption Button 1~7に、それぞれOpt1~Opt7の名前を付けていますので問題ないと思いますが、これが仮にOption Button 1~7という規則的ならびではなかったものをOpt1~Opt7の名前をつけていたとしたらやはり使えないんでしょうねぇ?

補足日時:2006/03/24 20:02
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。

> CCK3にチェック、OP3がONの状態の時、CCK3のチェックを外した場合、OP3はONのまま?それともOFFにする?

これは下記のコードで対処済みなんです。

Sub CCK_Click()
Dim x As Integer
x = Right(Application.Caller, 1)
With ActiveSheet
If .CheckBoxes("CCK" & x).Value = 1 Then Exit Sub
If .OptionButtons("Opt" & x).Value = xlOn Then
MsgBox "これははずしちゃだめ!", vbCritical, "Sorry!!"
.CheckBoxes("CCK" & x).Value = 1
End If
End With
End Sub

お礼日時:2006/03/24 19:52

こんばんは。



CCK3にチェック、OP3がONの状態のとき云々は、杞憂でしたね。(^^;


>Option Button 1~7という規則的ならびではなかったものをOpt1~Opt7の名前をつけていたとしたらやはり使えないんでしょうねぇ?

やりかた次第で可能だと思いますよ。
何れにしても、も少し具体的な例(なるべく実態に近い例)を挙げて貰えれば答えやすいのですが。。。

以上です。
 
    • good
    • 0
この回答へのお礼

> も少し具体的な例(なるべく実態に近い例)を挙げて貰えれば答えやすいのですが。。。

わかりました。
まとめまして新しい質問として再度投稿します。
ありがとうございました。

お礼日時:2006/03/24 22:28

こんにちは。



>それはわたしも考えましたが、オプションボタンを押して初めてマクロが走るんですから、押したあとでEnabled=Falseでは意味がないんです。

読んでいても、おやりになりたいことが、良く理解できないのですが、押した後でダメなら、C1の.Enabled=False の条件だけにすればよいと思いますね。

 If Range("C1").Value = True And t = 3 Then
        ↓
 If Range("C1").Value = True Then

でも、#11 の「回答に対するお礼」の例では、

C1 に 3

を入れて、以下のようにすればよいのではありませんか?

'これ以外は、#12 と他は全て同じです。

Sub OPValueStock()
  Dim t As Integer
  'オプションボタンの値を確保
  With ActiveSheet
  t = .Shapes(Application.Caller).DrawingObject.Index
  If Range("C1").Value = t Then
   MsgBox "それは選べません。", 16
   Me.OptionButtons(t).Value = 0
    j = i
    Call OPRecover
  End If
    j = i
    i = t
  End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
これからもご指導くださいますようお願いいたします。

お礼日時:2006/03/25 02:43

こんばんは。



Wendy02の#8 発言、間違いでした。#2の「回答に対するお礼」の読み違えです。taocat さんの書き込みで、その流れを気づきました。

>どのオプションボタンを押したかで、条件が整うのです。仮にC1セルの値が「TRUE」の時に3番目のオプションボタンを押されたら「キャンセル」させるといった具合です

これは、単に、C1 が、True だったら、OptionButtons(3).Enable =False
っていうことではありませんか?

キャンセルというよりも、選べなくすればよいと思います。

具体的には、このようになります。
  t = .Shapes(Application.Caller).DrawingObject.Index
  If Range("C1").Value = True And t = 3 Then
   Me.OptionButtons(3).Enabled = False
  Else
   Me.OptionButtons(3).Enabled = True
  End If

とすればよいのでは?

それから、これは、難しく考えないで、ものすごくシンプルに考えればよいのではありませんか?

'シートモジュール

Private i As Integer
Private j As Integer
Sub OPValueStock()
  Dim t As Integer
  'オプションボタンの値を確保
  With ActiveSheet
  t = .Shapes(Application.Caller).DrawingObject.Index
  If Range("C1").Value = True And t = 3 Then
   Me.OptionButtons(3).Enabled = False
  Else
   Me.OptionButtons(3).Enabled = True
  End If
    j = i
    i = t
  End With
End Sub
Private Sub OPRecover()
  'オプションボタンの値を戻す(UnDo)
   On Error Resume Next
   Me.OptionButtons(j).Value = 1
End Sub
'=======================================
'設定用マクロ'(一回だけでよい)
Sub SettingMacro()
'オプションボタンの設定
Dim o As Variant
For Each o In ActiveSheet.OptionButtons
  o.OnAction = Me.Name & ".OPValueStock"
Next o
End Sub
    • good
    • 0
この回答へのお礼

何度も何度もお手間かけ、申し訳ありません。

>キャンセルというよりも、選べなくすればよいと思います。

それはわたしも考えましたが、オプションボタンを押して初めてマクロが走るんですから、押したあとでEnabled=Falseでは意味がないんです。
今回は11番のtaocatさんのやり方に、Application.Callerを組み合わせて何とかできました。ほとんどわかってないんですが・・・・。
これからもいろいろご教示いただければ幸いです。
ありがとうございました。

お礼日時:2006/03/24 11:44

こんばんは。


merlionXXさん、ほんとに色んなことされてますねぇ。(^^;

要するにセルC1に値がある時は、OptionButton3を選択できないようにする、ということですね?


(全て標準モジュール)
--------------------------------------------

Public myOpValues(7) As Integer

-----------------------------------
Sub オプション1_Click()
  Call OpCheck(1)
End Sub
-----------------------------------
Sub オプション2_Click()
  Call OpCheck(2)
End Sub
-----------------------------------
Sub オプション3_Click()
  Call OpCheck(3)
End Sub
-----------------------------------
Sub オプション4_Click()
  Call OpCheck(4)
End Sub
-----------------------------------
Sub オプション5_Click()
  Call OpCheck(5)
End Sub
-----------------------------------
Sub オプション6_Click()
  Call OpCheck(6)
End Sub
-----------------------------------
Sub オプション7_Click()
  Call OpCheck(7)
End Sub

------------------------------------------
Sub OpCheck(OpNo)

 Dim N As Integer
 Dim Q As Integer

 If OpNo = 3 And Range("C1").Value <>"" Then
   For N = 1 To 7
     If N <> 3 And myOpValues(N) = 1 Then
        ActiveSheet.OptionButtons(N).Value = 1
        Exit Sub
     End If
   Next N
 End If

 For N = 1 To 7
   myOpValues(N) = 0
   If N = OpNo Then myOpValues(N) = 1
 Next N

End Sub
--------------------------------------------

なお、分かり易くするためにOptionButtonの数は質問の7に固定し、名前もデフォルトにしてあります。
実際にはwendy02さんのようにcount,redimなど使用すべきですね。

勘違いしてましたら平にご容赦願います。(^^;;;
以上です。
 
    • good
    • 0
この回答へのお礼

taocatさん、お世話になります。
実はちょっとやり方を変え、やはりフォームでチェックボックスを7個つくり(CCK1~CCK7)、このチェックボックスの番号に対応するオプションボタン(OP1~OP7でひとつのグループ)があるんです。
で、チェックボックスがチェックされてない番号のオプションボタンが押されたときに無効にしたいのです。(CCK1がチェックされてないのにOP1は押せない)
試行錯誤の結果、ぜんぜん意味がわからないんですが下記のコードでなんとかできるようになりました!でも、ぜんぜんわからないので教えてください。

Public myOpValues(7) As Integer 'これmyOpValues(7) ってどういう意味ですか?

Sub Opt_Click() ’これを各オプションボタンにセットしました。
Dim x As Integer
x = Right(Application.Caller, 1) ’これでどのオプションボタンが押されたかわかります。
Call OpCheck(x)
End Sub

Sub OpCheck(OpNo)
Dim N As Integer
Dim Q As Integer

If ActiveSheet.CheckBoxes("CCK" & OpNo).Value <> 1 Then
MsgBox "そこは選べないわよ。", vbCritical, "Sorry!!"
For N = 1 To 7
If N <> OpNo And myOpValues(N) = 1 Then 'このmyOpValues(N) はなんですか?
ActiveSheet.OptionButtons(N).Value = 1
Exit Sub
End If
Next N
End If

For N = 1 To 7
myOpValues(N) = 0 'このmyOpValues(N)=0 はどんな意味ですか?
If N = OpNo Then myOpValues(N) = 1
Next N

End Sub

お礼日時:2006/03/24 11:26

s_husky です。



ルーチンとコードの記述内容は同じです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちょっとわたしには手におえませんでした。ごめんなさい

お礼日時:2006/03/24 11:29

#7です。



>Private Sub SetOption(Idx As Integer, sw As Boolean)
>Sheet2.Shapes("Opt" & Idx).ControlFormat.Value = sw

>Private Sub SetOption(Idx As Integer, sw As Boolean)
ActiveSheet.Shapes("Opt" & Idx).ControlFormat.Value = sw

にしてください。ゴメン
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちょっとわたしには手におえませんでした。ごめんなさい。

お礼日時:2006/03/24 11:27

こんばんは。



>でも、考えたんですが、各オプションボタンにSub OPValueStock()を登録しても、それで保存されるのはオプションボタンを押した状態での配列ですよね?押す前の状態は保存されないのでは?

まったく、押されていない、すべてオフの状態では、登録をしたところで、全部オフです。

しかし、もしも、すでに、押されている状態を取得するのでしたら、Sheet_Activate イベントやWorkbook_Open イベントで取ります。

もし、固定状態でしたら、最初から、配列で、どれか1つに、1を代入すればよいわけです。

後は、配列の中身を、ローカルウィンドウで確保されているかみてください。
On は、1として入っているはずです。
    • good
    • 0

エクセルは門外漢ですが。


フォームのオプションボタンをはじめて使いました。。。

Option Explicit

Dim OptionIndex As Integer

Private Function CheckCondition() As Boolean
'キャンセルする条件の場合 True を返してね。
CheckCondition = False
End Function

Private Sub SetOption(Idx As Integer, sw As Boolean)
Sheet2.Shapes("Opt" & Idx).ControlFormat.Value = sw
If sw Then
OptionIndex = Idx
Else
OptionIndex = 0
End If
End Sub

Private Sub CheckOption(Idx As Integer)
If Not CheckCondition Then
OptionIndex = Idx
Else
If OptionIndex <> 0 Then
SetOption OptionIndex, True
Else
SetOption Idx, False
End If
End If
End Sub

Public Sub Opt1_Click()
CheckOption 1
End Sub

Public Sub Opt2_Click()
CheckOption 2
End Sub
'・・・・・・
Public Sub Opt7_Click()
CheckOption 7
End Sub
    • good
    • 0

こんにちは。



>Sub OPRecoverを走らせましたが、オプションボタンは元には戻りませんでした。
大方、それは、モジュールレベル変数が抜けているのだと思います。

Private Ops() As Long '←これ

ただし、他のプロシージャが同一のモジュールにない場合は、Public にしてくださいね。
    • good
    • 0
この回答へのお礼

> Private Ops() As Long '←これ

いいえ、忘れていません。同一モジュールの一番上にあります。
でも、考えたんですが、各オプションボタンにSub OPValueStock()を登録しても、それで保存されるのはオプションボタンを押した状態での配列ですよね?押す前の状態は保存されないのでは?(よくわかってもないのにすみません)

お礼日時:2006/03/23 17:52

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QエクセルVBA オプションボタンのチェックを外したい

いつもお世話になります。

エクセルで、ユーザーフォームでオプションボタンを使っているのですが、オプションボタンを選択し、ユーザーフォームを消して、もう一度表示させた時に、前に選択したオプションボタンの黒丸が残っている時があるのです。

ユーザーフォームを表示させた時に前に選択した黒丸を消す方法はありますでしょうか?

Aベストアンサー

こんにちは。

userformを消すとき、Me.Hideを使用してるとそうなります。
Unload Me ならなりません。

が、単純にUserformのActivateイベントを利用してもいいですね。

-----------------------------------------
Private Sub UserForm_Activate()
 OptionButton1.Value = 0
 OptionButton2.Value = 0
 OptionButton3.Value = 0
End Sub
-------------------------------------------

以上です。

QエクセルVBAでオプションボタンを無効にする方法

フォームで作成したオプションボタンを一定の条件下で無効にするにはどのような記述をすればよいのでしょうか?
たとえばsheets("Sheet1").Range("A1")がFalseのときにShapes("Option Button 1")を無効にするという記述です。

Aベストアンサー

こんなのでは?

ActiveSheet.Shapes("Option Button 1").Select
Selection.Enabled = False

ボタン1と2が同グループの場合、ボタン1をTrue状態のまま操作できなくしても、
ボタン2が選択されるとボタン1はFalseになりますが。

QExcel ラジオボタンのリセットを作りたい

http://www3.plala.or.jp/hkyoji/javascript/javano6.htm
上記サイトのようなラジオボタンをEXCELで作りましたが、
リセットするボタンの作り方がわかりません。
調べてもWebでのことしかでてきません。
ご教授よろしくお願いします。

Aベストアンサー

こんばんは。

通常では、ラジオボタン(Excelでは、オプションボタン)のリセットはしません。それは、必ず、ひとつが必ず「オン」 になるようになっているからです。あえて作るなら以下のようになります。


Private Sub CommandButton1_Click()
 For Each cnt In ActiveSheet.OLEObjects
  If TypeOf cnt.Object Is MSForms.OptionButton Then
    cnt.Object.Value = False
  End If
 Next
End Sub

QエクセルVBAでOptionButtonのオンオフ取得

ワークシート上に貼り付けてあるオプションボタンの状態の取得ですが、フォームのオプションボタンなら
例えば、
MsgBox ActiveSheet.OptionButtons("Option Button 44").Value で、オンなら1、オフなら-4146が返ります。
またActiveSheet.OptionButtons("Option Button 44").Value=xlOnで オンに出来ます。

ところがフォームじゃないコントロールツールボックスのオプションボタンは
MsgBox ActiveSheet.Shapes("OptionButton30").Valueでも
MsgBox ActiveSheet.Controls("OptionButton30").Valueでもエラーになります。
どうやって取得すればいいのでしょうか?
どうやてOn Off を指示すればいいのでしょうか?

Aベストアンサー

同一ワークシート内にオプションボタン1つ、コマンドボタン一つを配置して、コマンドボタンに、現在のオプションボタンの値をMSGBOXで表示させ、その後OFF(False)にするようなサンプルを作って、Excel2000で試してみました。

Private Sub CommandButton1_Click()
MsgBox OptionButton1.Value
OptionButton1.Value= False
End Sub

というコードです。
とりわけ問題なく動作しました。
LinkCellを指定するかどうか、複数配置かどうかで微妙に動作が異なるようです。

参考までに。

QエクセルVBAマクロのオプションボタンについて

オプションボタンのマクロに関して教えて下さい。
マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。

「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。

色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。

Private Sub OptionButton1_Click()
オプション1 = True
End Sub
Private Sub OptionButton2_Click()
オプション2 = True
End Sub
Sub オプションボタン()
If オプション1 = True Then
Range("a1") = 1
ElseIf オプション2 = True Then
Range("a1") = 2
Else
Range("a1") = 0
End If
End Sub

作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。

ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。
ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

オプションボタンのマクロに関して教えて下さい。
マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。

「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。

色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。

Private Sub OptionButton1_Click()
オプション1 = True
End Sub
Pri...続きを読む

Aベストアンサー

こんばんは。

出来れば、そろそろコントロールツール側のコントロールをお使いになってください。

今から、フォーム(ダイアログシートを含む)を勉強しようとしても、資料も手に入らないでしょうし、今は、隠しオブジェクトになってしまいましたので、インテリセンスが利きません。フォームのコントロールは、コントロール配列の真似事が出来ますので便利ですが、少し、その分、深く勉強しないと難しいのです。(Ver.5のマニュアルには詳しく出ています)

それと、オプション1_Click 等は、右クリックで自動記録で出来ますので、それは手をつけませんが、一応、「Sub オプションボタン()」の2バイト文字の名称は、ユーザーが作成するプロシージャなので、なるべくアルファベットでつけてください。

なお、コントロールの名称は間違ってませんが、マクロで操作するには、私には、どうも曖昧さが残るような気がします。

それと、フォームのオプションボタンの戻り値は、1 と0で、True / False ではありません。今回は、組み込み定数を使いました。(xlOn)

この説明は、少し難しいかもしれませんね。

'標準モジュール

Sub OptionButtonsMcr()
'シート名は必ず入れます。
With Worksheets("Sheet1")
If .OptionButtons("Option Button 1").Value = xlOn Then
 .Range("a1").Value = 1
ElseIf .OptionButtons("Option Button 2").Value = xlOn Then
 .Range("a1").Value = 2
Else
 .Range("a1").Value = 0
End If
End With
End Sub

Sub オプション1_Click()
 Call OptionButtonsMcr
End Sub
Sub オプション2_Click()
 Call OptionButtonsMcr
End Sub

なお、Index を使った、もっと簡単な方法もありますが、逆に、その考え方は自体は難しくなります。すべて以下のマクロに登録すればよいです。Sub オプション1_Click() 等の個別のマクロは必要ありません。

'補足(Index を使った方法)
'---------------------------
Sub OptionbuttonsMcr()
Dim i As Integer
With Worksheets("Sheet1")
 i = .OptionButtons(Application.Caller).Index
 If i < 3 Then
  .Range("a1").Value = i
 Else
  .Range("a1").Value = 0
 End If
End With
End Sub

こんばんは。

出来れば、そろそろコントロールツール側のコントロールをお使いになってください。

今から、フォーム(ダイアログシートを含む)を勉強しようとしても、資料も手に入らないでしょうし、今は、隠しオブジェクトになってしまいましたので、インテリセンスが利きません。フォームのコントロールは、コントロール配列の真似事が出来ますので便利ですが、少し、その分、深く勉強しないと難しいのです。(Ver.5のマニュアルには詳しく出ています)

それと、オプション1_Click 等は、右クリックで自...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL2003 オプションボタン複数選択/解除

excel2003を使用しています。

今sheet上にオプションボタンをを横一列に5つ作りました。
(1)オプションボタンを複数にチェックをいれたい。
(2)同じボタンを2回押すとチェックが外れる。

ように設定したいです。
VBAでも構いません。
急いでいます。知恵を貸してください。

Aベストアンサー

>(1)オプションボタンを複数にチェックをいれたい。
>(2)同じボタンを2回押すとチェックが外れる。
オプションボタンじゃなくて、チェックボックスにすればいいんじゃないですか?

Q【エクセル】オプションボタンにセルの値を反映させるには

エクセルマクロ初心者です。教えてください。

シート2 の あるセルの値が A のとき
シート1上の オプションボタン1がtrueになる。
シート2 の あるセルの値が A以外のとき
シート1上の オプションボタン1がfalseになる。

(オプションボタン1はフォームコントロールのオプションボタンです。)

という結果になるマクロの登録方法を模索していますがうまくいきません。
実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記(オプションボタンのほかコンボボックスなどの内容を転記します)。シート1上のリストボックスに蓄積シートの内容を表示し、選択するとその内容を呼び出すようにしたいのです。
コンボボックスやテキストボックスに呼び出すところまではなんとか本を見たりしてできたのですが、オプションボタンに呼び出せません。
なんとかお知恵をお借りしたいです。

よろしくおねがいします。

*下記のようにやってみました。

Private Sub commandbutton3_click()

Dim n As Integer
n = ListBox1.ListIndex
If n = -1 Then
MsgBox "選択してください"
Else
ComboBox2.Value = ListBox1.List(n, 0)
ComboBox3.Value = ListBox1.List(n, 3)
ComboBox4.Value = ListBox1.List(n, 4)
ComboBox5.Value = ListBox1.List(n, 8)
ComboBox6.Value = ListBox1.List(n, 9)
ComboBox7.Value = ListBox1.List(n, 1)
ComboBox8.Value = ListBox1.List(n, 2)
TextBox3.Value = ListBox1.List(n, 10)
End if

***********ここからがうまくいきません********

If Worksheets("入力シート").ListBox1.List(n, 6).Value = "A" Then
OptionButton1.Value = True

Else
OptionButton("A").Value = False

End If
End Sub

エクセルマクロ初心者です。教えてください。

シート2 の あるセルの値が A のとき
シート1上の オプションボタン1がtrueになる。
シート2 の あるセルの値が A以外のとき
シート1上の オプションボタン1がfalseになる。

(オプションボタン1はフォームコントロールのオプションボタンです。)

という結果になるマクロの登録方法を模索していますがうまくいきません。
実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記(オプションボタンのほかコンボボック...続きを読む

Aベストアンサー

>A1がAならば、オプションボタンがOn
>そうでないならば Off    
>との設定のはずが、
>
>A1がAでも否でもOff
>という結果になります。
んん?
A1ってA1セルの事ですか?
もしそうなら、コードが全然違いますよ?
A1セルだったら
If .Range("A1").Value = "A" Then
':
で良いんですが。
提示してない何処かに
.Range("A1").Value = .ListBox1.List(n, 6)
なんて書いてあったりするんですか?



If .ListBox1.List(n, 6) = "A" Then
  .OptionButtons("Option Button 16").Value = xlOn
Else
':
このコードの意味は、ListBox1で選択した行の7列目の値が A だったら On です。
(ListBoxの列を表す時、一番左が 0 からなので。)

ListBox1の、選択した値を確認してください。


>また、複数のoptionbuttonのon off を条件によって替えたいときは、
>ネットで調べたところ、if よりselect case の方がよさそうな記述をみましたがどう思われますか?
良いと思います。

Select Case .ListBox1.List(1, 6)
  Case "A"
    .OptionButtons("Option Button 16").Value = xlOn
  Case "B"
    .OptionButtons("Option Button 17").Value = xlOn
  Case "C"
    .OptionButtons("Option Button 18").Value = xlOn
End Select

個人の好みにもよりますが、可読性が良くていいんじゃないでしょうか。

>A1がAならば、オプションボタンがOn
>そうでないならば Off    
>との設定のはずが、
>
>A1がAでも否でもOff
>という結果になります。
んん?
A1ってA1セルの事ですか?
もしそうなら、コードが全然違いますよ?
A1セルだったら
If .Range("A1").Value = "A" Then
':
で良いんですが。
提示してない何処かに
.Range("A1").Value = .ListBox1.List(n, 6)
なんて書いてあったりするんですか?



If .ListBox1.List(n, 6) = "A" Then
  .OptionButtons("Option Button 16").Value = xl...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報