• 締切済み

選択セルの中身が変わる理由

4月 5月 6月 商品A 87 58 210 商品B 85 90 117 商品C 100 54 130 商品D 76 210 325 合計 348 412 782 Sub 数値条件セル選択() Dim 対象セル As Range Dim 選択セル As Range 'シート内の数値セルを選択 ActiveSheet.UsedRange.Select ActiveCell.SpecialCells(xlCellTypeConstants, xlNumbers).Select '「100以上」のセルを選択 1 For Each 対象セル In Selection 2 If Val(対象セル.Value) >= 100 Then 3 If 選択セル Is Nothing Then 4 Set 選択セル = 対象セル Else 5 Set 選択セル = Union(選択セル, 対象セル) End If End If Next '検索結果の表示 If 選択セル Is Nothing Then ActiveCell.Select MsgBox "該当セルはありませんでした" Else 選択セル.Select End If End Sub 教えてください 3,4の所なのですが、最初に見つけた100以上の値(6月の210)なので 選択セルに210が入るのですが、コレは分かりました。が最後までコードを進めていくと選択セルが(4月の100)になっています。 コレはなぜでしょうか。分かりません。教えてくださいお願いします。 VBAの勉強(初心者です)

みんなの回答

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

>最初に見つけた100以上の値(6月の210)なので >選択セルに210が入るのですが、コレは分かりました >が最後までコードを進めていくと選択セルが(4月の100)になっています >コレはなぜでしょうか。 それは、Unionメソッドがある規則に沿ってセルを結合しているからです。 所謂、Unionメソッドの仕様ということです。 「ある規則」については、自分で見つけてくだされ。 下記のように●MsgBox●を入れてみればそれを確認できます。 '----------------------------------------- Set 選択セル = Union(選択セル, 対象セル) End If   ●●●   MsgBox 対象セル.Address(0, 0) & " @ " & 選択セル.Address(0, 0)   ●●● End If Next '---------------------------------------- ただ、この結合の順番が何か問題になるのでしょうか。 それとも単に疑問に思った程度でせうか。 以上。  

tom-jm
質問者

お礼

早速お答えありがとうございました。 コード上問題はなく、できるのですが、最初見つけた210が選択セルに格納されているのに途中で、nothingに変わり100が選択セルに格納されるとは思っても見なかった。単に疑問に思った程度でせうか。あなたのレベルではそうかもしれませんが、私のレベルでは大変な疑問です。 これからも低レベルの者の面倒を見てください。一つのプログラムを作るにはあらゆる方向からの知識が必要だと思います。一つの方向じゃァなくて、それにはこと細かく知ることだと思います。教本に載っているのはただの基礎それを超えなければなりません。一人では、難しいです。がこのサイトはそのためにあってほしいです。自分の思ったものが作れて初めて嬉しいのです。(自分のプログラム)またよろしくお願いいたします。

関連するQ&A

  • 検索後のセルの選択を正しくしたい

    Excel2007でマクロ作成中の初心者です。 以下のコードの中で(1)のところがうまく作動できません。 ここの ActiveCell.Select を正常にするにはどうしたらよいかご教示をお願いします。 Sub 最終日の検索() Dim FC As Range Dim mydate As Date mydate = Range("BQ5").Value For Each FC In Range("BR30:BR300") If FC.Value = DateValue(mydate) Then Exit For End If Next If FC Is Nothing Then MsgBox "みつかりませんここでおわりです" Exit Sub End If MsgBox "見つかりました" & vbLf & FC.Address(0, 0) & vbLf & FC.Value ' ' ここに処理を追加したい ActiveCell.Select ’----------(1) Selection.Offset(0, 45).Select ActiveCell.Select 貼付けしてあるかどうか Set FC = Nothing End Sub ---------------------------------- Sub 貼付けしてあるかどうか() If ActiveCell.Value = "※※" Then MsgBox " 既に貼付けしてあります" Else MsgBox "貼付けしてないので処理します" End If End Sub

  • 無効なセルを参照した場合の判定について

    表内のセルを選択した場合と、表外のセルを選択した場合に処理を分けたいと考えています。アクティブセルがhaniに含まれる場合(または含まれない場合)ですが、<>と=では無理なようなのですが、何を調べても分かりません。どなたかよろしくお願いいたします。 Windows2003、XPです。 Sub shita() Dim a As Range Dim hani As Range Set hani = UsedRange b = ActiveCell.Address MsgBox UsedRange.Address & " " & ActiveCell.Address If b = hani.Address Then Range("A1").Select Else MsgBox "表内のセルを選択してください。" End If End Sub

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • VBA Offsetで選択セルを移動させる

    よろしくお願いします。 H8から一行づつ下げてH10まで来たらH15まで飛ばして また一行づつ下げていく。 H20まで来たらH27まで飛ばしてまた一行づつ下げていく。 このようにしたいのですが、構文が解りません。 Private Sub CommandButton1_Click() If ActiveSheet.Range("H8").Activate Then ActiveCell.offset(1, 0).Activate Else ActiveCell.offset(1, 0).Activate End If If ActiveSheet.Range("H10").Activate Then ActiveCell.offset(5, 0).Activate Else ActiveCell.offset(1, 0).Activate End If If ActiveSheet.Range("H20").Activate Then ActiveCell.offset(7, 0).Activate Else ActiveCell.offset(1, 0).Activate End If End Sub

  • 現在選択中のセルの中に空白があるのなら

    現在選択中のセルの中に空白があるのなら と言うコードを作りたいのですが Sub test() Dim r As Range Set r = Selection 'if rの中に空白があるなら then MsgBox "空白セルがあります" 'end if Set r = Nothing End Sub ここまでしかわかりませんでした。 ifステートメントどうすればいいか教えていただけますか? ご教授よろしくお願いします。

  • Changeイベントのセル選択

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myrang As Range Dim x as Long ★★ 'K列に入力した時 If Target.Column = 11 And Target.Count = 1 Then With Workbooks("システム.xlsm").Worksheets("台帳").Columns(7) Set myrang = .Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, matchbyte:=False, searchformat:=False) End With If myrang Is Nothing Then Dim intret As Integer ’☆ intret = MsgBox("入力エラーです!", vbCritical + vbOKOnly, "エラー発生") Else  処理2のコード X=2  ★★ End If Target.offset(X,0).select End If     End sub ’☆1のメッセージボックスが出て、OKを押したときは、入力したセルを選択、 処理2を行ったときは、2行下のセルを選択したい、という質問をし、★★のコードを教えていただき、 思った通りの動作をしました。 このパターンで、同じように1行下のセルを選択、は出来たのですが。 他に、 ’☆1のメッセージボックスが出た時には、入力したセル、 処理2を行ったときは Target.offset(1,3).select としたい時はどのようにしたらいいのでしょうか? 会社にしかパソコンがなく、お返事は明日になると思いますが、どなたか よろしくお願い致します。

  • vba  対象セルが空白の間動作を繰り返すには?

    下記を走らせると、セルが右端まで行ってとまります。 そうなる前に、対象セル範囲が空白になった時点で、動作を止めたいのですが どう記述するのがいいでしょうか? Dim u As Integer, o As Integer Application.Calculate For u = 2 To 3 For o = 7 To 2000 If Cells(u, o) = "" Then Range("G2").Select Range("G2").End(xlToRight).Select ActiveCell.Resize(6, 5).Select Selection.Cut Range("B2").Select Range("B2").End(xlDown).Select ActiveCell.Offset(1).Select ActiveSheet.Paste End If Next o Next u End Sub

  • セルの選択ができません。

    windws7 Excel2007でマクロ作成中の初心者です。 B列に8月21日から9月20日まで入力されてます。 以下のコードでセルBW28の数値によりセル選択範囲が異なります。 すべて8月21日の行から開始します。 28のときは、8月21日の行から28番目の行まで選択 29のときは、8月21日の行から29番目の行まで選択 30のときは、8月21日の行から30番目の行まで選択 以上正常にセルの選択が出来ます。 しかし31のとき 8月21日の行ただ1行しか選択してくれません。 上の例のように 8月21日の行から31番目の行、つまり9月20日までの行まで 選択したいのですが、どうしたらよいでしょうか。 Sub sersu sentaku() If Range("BW28") = 28 Then Range("B30").Resize(Day(DateSerial(Year(Date), Month(Date), 28)), 66).Select ElseIf Range("BW28") = 29 Then Range("B30").Resize(Day(DateSerial(Year(Date), Month(Date), 29)), 66).Select ElseIf Range("BW28") = 30 Then Range("B30").Resize(Day(DateSerial(Year(Date), Month(Date), 30)), 66).Select ElseIf Range("BW28") = 31 Then Range("B30").Resize(Day(DateSerial(Year(Date), Month(Date), 31)), 66).Select End If End Sub

  • Excel VBA セル選択

    Sub 全角() Dim i As Long, buf As String For i = 1 To Len(ActiveCell.Value) If Mid(ActiveCell.Value, i, 1) Like "[ア-ン]" Then buf = buf & StrConv(Mid(ActiveCell.Value, i, 1), vbWide) Else buf = buf & Mid(ActiveCell.Value, i, 1) End If Next i ActiveCell.Value = buf End Sub このコードだと一つのセルしか変換できません。 選択した範囲全部を変換できるようにしたいです。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

専門家に質問してみよう