重複データの上書き

このQ&Aのポイント
  • 重複データを上書きするために、コンボボックス1のデータと重複しているセル(B2:B50)を探し、その行のデータを上書きします。
  • ExcelのVBAを使用して、コンボボックス1の選択データと重複しているセル(B2:B50)を検索し、見つかったセルの行のデータを上書きします。
  • VBAマクロを使用して、コンボボックス1の値がセルB2からB50の範囲内で重複している場合、それに対応する行のデータを上書きします。
回答を見る
  • ベストアンサー

重複データーの上書き

行き詰っています。 よろしくお願いします。 下の構文では、 エラー:オブジェクトは、このプロパティまたはメソッドをサポートしていません と、表示されます。 ”コンボボックス1のデーターと重複しているセル(B2:B50)を探してその行の データーを上書きしたいのです” Private Sub CommandButton1_Click() Dim Mynumber As String Dim FoundCell As Range Sheets("AA").Range("B2:B50").Select Mynumber = ユーザーフォーム.コンボボックス1.Value Set FoundCell = Cells.Find(What:=Mynumber, After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) If FoundCell Is Nothing = False Then FoundCell.Select Sheets("AA").Offset(0, 0).Select = Me.コンボボックス1.Value Sheets("AA").Offset(0, 1).Select = Me.テキストボックス1.Value Sheets("AA").Offset(0, 2).Select = Me.テキストボックス2.Value Sheets("AA").Offset(0, 3).Select = Me.テキストボックス3.Value End If Exit Sub End Sub

  • 1211M
  • お礼率54% (90/165)

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

まず、質問するのだから、読者(回答者)にどういうことをしたのか、文章で説明するのが礼儀だろう。 ーーー たとえば ユーザーフォームを使う。そこへ コンボボックス1つ テキストボックス3つを貼りつける 当然コマンドコマンドボタンを1つ貼りつける ーーー 私の実験例では そのコンボで選択した文字列について シートのセル範囲B列B2:B50を検索する。 見つかった場合、見つかったセルを検索語で置換し 同行のとなり1列目、2列目、3列目をテキストボックスの値で置き換える。 ーー 下記が、VBA的に参考になる点があれば。 該当データが、複数回出現しないデータなら Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "a" '.AddItem="a"じゃないよ UserForm1.ComboBox1.AddItem "b" UserForm1.ComboBox1.AddItem "c" End Sub ーー Private Sub CommandButton1_Click() Dim obj As Object x = UserForm1.ComboBox1.Text MsgBox x Set obj = Worksheets("Sheet1").Range("B2:B50").Find(x, LookAt:=xlWhole) 'xlPartがよいかも If obj Is Nothing Then MsgBox x & "は見つかりませんでした。" Else   ’テスト時の確認用 rw = obj.Row cl = obj.Column MsgBox x & "は、" + CStr(rw) + "行目の" _ + CStr(cl) + "列目にあります" End If '--シートデータ加工 obj.Replace What:="a", Replacement:="aXXX", LookAt:=xlPart '部分的置換 obj.Offset(0, 1) = UserForm1.TextBox1.Text '質問の仕様から obj.Offset(0, 2) = UserForm1.TextBox2.Text obj.Offset(0, 3) = UserForm1.TextBox3.Text End Sub 実行前 B1:B4 データ a b c ーー 実行後B1:E4 データ aXXX x v b b c ーーー >Sheets("AA") シート名に.空白を含めているということか。 質問のようなときに、余り特殊な例は出さないようにしてほしい。 メインでない、問題点が拡がってしまう恐れがある。 http://www.excel.studio-kazu.jp/kw/20060814154532.html シート名の中に空白を含めるのはお勧めじゃない。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

重複して現れることが考えられる場合、追加でFindNextを使う Private Sub CommandButton1_Click() Dim obj As Object x = UserForm1.ComboBox1.Text 'MsgBox x Set obj = Worksheets("Sheet1").Range("B2:B50").Find(x, LookAt:=xlPart) 'xlPartに注意 If obj Is Nothing Then MsgBox x & "は見つかりませんでした。" Else '見つかった確認用 rw = obj.Row cl = obj.Column MsgBox x & "は、" + CStr(rw) + "行目の" _ + CStr(cl) + "列目にあります" End If '--シートデータ加工 obj.Replace What:=x, Replacement:=x & "XYZ", LookAt:=xlPart obj.Offset(0, 1) = UserForm1.TextBox1.Text '質問の仕様から obj.Offset(0, 2) = UserForm1.TextBox2.Text obj.Offset(0, 3) = UserForm1.TextBox3.Text '-- Dim firstAddress As String firstAddress = obj.Address Do Set obj = Worksheets("Sheet1").Range("B2:B50").FindNext(obj) If obj Is Nothing Then Exit Do End If If obj.Address = firstAddress Then Exit Do Else '--シートデータ加工 obj.Replace What:=x, Replacement:=x & "XYZ", LookAt:=xlPart obj.Offset(0, 1) = UserForm1.TextBox1.Text '質問の仕様から obj.Offset(0, 2) = UserForm1.TextBox2.Text obj.Offset(0, 3) = UserForm1.TextBox3.Text End If Loop End Sub データ例 実行前 データ B列 abc b c b c d abc c b c cab ーーー 実行後結果 コンボで「a」選んで、3つのテキストボックスはそれぞれg、h、jを入力 元の検索語(上記ではx)のあとに、文字列「XXX」を追加するテスト仕様にした。 結果 データ aXXXbc g h j b c b c d aXYZbc g h j c b c caXXXb g h j ーー 行ったテストデータが少数なので、間違いがなければよいが。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

実行して、止まらないコードを質問には上げること。止まるなら注記すべき。 初心者のコードなど前面に出すべきでなく(参考に掲出はすべきかと思うが)、回答がでて、その中でよいと思うコードを取り入れたら。 本件ではないが、処理のロジックからして、過去に不適当なものも相当あった。 ーー Sheets("AA").Offset(0, 0).Select = Me.コンボボックス1.Value はエラーになる。 私の常識とも、合わない ・Sheets("AA"). A:Aは何をしようとしているの?Rangeと間違った? OffsetはRangeオブジェクトに対して使うのではない? ・).Select =  Selectのあとに代入はすぐ来るのは? ーー ・エクセルらしいが、表題にエクセルVBAを入れること ・>重複しているセル(B2:B50)を探してその 表現がわかりにくい。 コンボボックス1のデーターと一致するものをシート上で、探して(検索Findか)、一致したセルの データをXXで置き換えたい(上書きには相違ないが、置き換えるや値を代入とか言うのでは)  という表現がよいのでは。

1211M
質問者

お礼

早速の回答ありがとうございます。 質問方法も考えてします。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは ちょっと無茶苦茶なコードです。 Selectを使用しないコードの書き方を勉強して下さい。 Sheets("AA").Offset(0, 0) も意味を考えれば当然エラーになります。

1211M
質問者

お礼

早速の回答ありがとうございます。 Selectを使用しないコードの書き方勉強します。

関連するQ&A

  • ユーザーフォーム オプションボタン について

    ユーザーフォーム内にオプションボタンを21個作っており、 Private Sub CommandButton1_Click() Dim SerchArea As Range '検索範囲(シート名指定) Set SearchArea = Sheets("1").Range(Range("A:A"), Range("A:A").End(xlDown)) '検索処理(引数:LookAt に xlWhole で完全一致 Set FoundCell = SearchArea.Find( _ What:=Me.TextBox1.Value, _ SearchOrder:=xlByRows, _ LookAt:=xlWhole, _ LookIn:=xlValues, _ MatchCase:=False) '商品コードが無い場合の処理 If FoundCell Is Nothing Then MsgBox "ありません!", vbCritical GoTo ExitHandler End If '見つかった場合の処理 With FoundCell Me.TextBox1.Value = .Offset(0, 0).Value Me.TextBox2.Value = .Offset(0, 11).Value Me.TextBox3.Value = .Offset(0, 12).Value Me.TextBox4.Value = .Offset(0, 4).Value テキストボックスにセルの値が入るようにしており、追加でオプションボタンを付けて更新としたいのですが、21個のうちどれか一つを選択して、その値をZ列に反映させたいのですが Private Sub CommandButton2_Click() With FoundCell .Offset(0, 13).Value = Me.TextBox20.Value .Offset(0, 4).Value = Me.TextBox4.Value .Offset(0, 5).Value = Me.TextBox5.Value ここの追加でオプションボタンを設定するにはどうすれば良いでしょうか?

  • コンボボックスのvba 作成の仕方

    私は、月別にデータを作っています。なので、月ごとにデータを見られるようなボタンを作成したいです。 現在組んでいるマクロは、ボタン(普通の四角いもの)を押すごとに、翌月データをコピペするというものになっています。 (以下、現在のコード記載) Sub auto_open() Dim wkm As Long Dim wkn As Long Dim wkt As Variant Dim wks As Variant Dim dt As Date Dim mi As Integer dt = Date mi = Month(dt) wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9) wks = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) wkm = wkt(mi) Call Macro1(wkm) Sheets("住宅資金").Range("A3") = wks(mi) End Sub Sub Next_Month() Dim wks As Variant Dim dt As Date Dim mi As Integer wks = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9) If Sheets("住宅資金").Range("A3") = 12 Then wkm = 10 Else wkm = wks(Sheets("住宅資金").Range("A3") + 1) End If Call Macro1(wkm) wks = Array(0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3) Sheets("住宅資金").Range("A3") = wks(wkm) End Sub Sub Macro1(ByVal wkm As Long) With Sheets("入力") Sheets("住宅資金").Range("D5:D23").Value = .Range("C5:C23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("J5:J23").Value = .Range("C28:C46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("P5:P23").Value = .Range("T28:T46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("O5:O23").Value = .Range("T5:T23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("F5:F23").Value = .Range("O5:O23").Value Sheets("住宅資金").Range("L5:L23").Value = .Range("O28:O46").Value End With With Sheets("目標") Sheets("住宅資金").Range("C5:C23").Value = .Range("B4:B22").Offset(, wkm - 1).Value Sheets("住宅資金").Range("I5:I23").Value = .Range("B27:B45").Offset(, wkm - 1).Value End With With Sheets("前年同期") Sheets("住宅資金").Range("H5:H23").Value = .Range("C5:C23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("N5:N23").Value = .Range("C28:C46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("Q5:Q23").Value = .Range("T5:T23").Offset(, wkm - 1).Value End With End Sub さて、現在作りたいと思っているものを以下に記述します。 普通の四角いボタンではなく、コンボボックスを使用して、矢印(▼)を押すことによってリストが表れ、 「1月」に合わせたら1月のデータがコピペされる、「8月」に合わせたら8月のデータがコピペされる、というものを作りたいと思っています。 以下のような空欄の表を作成したシートがあります。        A    B    C   D 1      目標  実績  …   … 2 ○支所   3 △支所 4  ・ 5  ・ 6  ・ 別のシートに、手入力した月別のデータがあります。 空欄のシートのどこかにコンボボックスを作り、別シートの○月のデータを貼り付けられるようにしたいと思っています。 コンボボックスの作り方がわからず、後一歩のところでつまずいてしまいました。 知恵をお貸しください。 よろしくお願いいたします。

  • データ検索について

    条件詳細 ・シートは、シートA/シートB。 ・シートAにユーザーフォームを表示するボタンを置く。 ・シートBに商品データ。 ・ユーザーフォームのオブジェクト名は、商品登録。 ・ ユーザーフォームにある項目は、商品番号/商品名/重さの3種類。  ※テキストボックス ・重さは、3種類((1)10kg/(2)20kg/(3)100kg)。 ・検索ボタンを押すと、検索フォームが表示される。 上記条件の下、ユーザーフォームに検索したデータを表示させたいのですが、 私のコードだと、デバックが出てしまい、うまく機能しません。 どのように追加または改造すれば、機能するのか ご教授願います。 私のコードは下記の通りです。 Private Sub cmd検索_Click() Dim SerchKey As String Dim SerchArea As Range lRow = Sheets("商品データ").Cells(65536, "A").End(xlUp).Row + 1 SearchKey = Application.InputBox( _ Prompt:="商品コードを入力して下さい。", Type:=2) If SearchKey = "" Or SearchKey = "False" Then Exit Sub End If Set SearchArea = Sheets("商品データ").Range(Range("A1"), Range("A1").End(xlDown))  ⇒このコードが黄色でデバック! Set FoundCell = SearchArea.Find( _ What:=SearchKey, _ SearchOrder:=xlByRows, _ LookAt:=xlWhole, _ MatchCase:=False) If FoundCell Is Nothing Then MsgBox "見つかりません", vbCritical GoTo ExitHandler End If With FoundCell 商品登録.txt商品コード.Value = .Value 商品登録.txt商品名.Value = .Offset(0, 1).Value 商品登録.txt重さ.Value = .Offset(0, 2).Value End With With Sheets("シートA") If .Cells(lRow, "G").Value = "10kg" Then txt重さ.Value = "0" ElseIf .Cells(lRow, "G").Value = "20kg" Then txt重さValue = "1" ElseIf .Cells(lRow, "G").Value = "100kg" Then txt重さ.Value = "2" End If End With ExitHandler: Set SearchArea = Nothing Exit Sub End Sub 下記がデバック(黄色)が出てしまいます。 Set SearchArea = Sheets("商品ータ").Range(Range("A1"), Range("A1").End(xlDown))   また、10kg/20kg/100kgが数字((1)(2)(3))に変換されません。 If~が機能してないようです。 どのようにしたら良いかお願いします。

  • 【EXCEL】UserFormで入力して 重複したデータがあった場合 上書きかキャンセルかを表示させたい。

    現在 Userformで入力して 末行に 登録され 並び替えするだけの マクロをやってます。 これだと同じ商品コードがあった場合 重複されてしまいます。ここで上書きされるようにするにはどうやったらいいのでしょうか? また 重複しています 上書きしますか?という警告表示は出せないでしょうか。よろしくお願いします。 A B 1 商品コード 名前 2 2986 AAAA 3 2987 BBBB 4 2988 cccc 5 2989 dddd 現在の userform のコード Private Sub CommandButton1_Click() Dim cord As String Dim syouhinnmei As String cord = TextBox1.Value syouhinmei = TextBox2.Value If cord = "" Then MsgBox "商品コードを入力してください" Exit Sub End If If syouhinmei = "" Then MsgBox "商品名を登録してください" Exit Sub End If myRow = Worksheets("Sheet1").Cells(65536, 2).End(xlUp).Row + 1 With Worksheets("Sheet1") .Cells(myRow, 1).Value = cord .Cells(myRow, 2).Value = syouhinmei End With Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then _ myCtrl.Value = vbNullString Next Sheets("Sheet1").Select Range("A1:B1").Select Range("A1:B2000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Sheets("Sheet2").Select Range("A1").Select End Sub

  • VBA 特定もセルに入力で実行

    下記のコードを実行した際は問題なく実行されるのですが これを特定のセルに値が入力された際に動かそうとするとエラーになってしまいます。 Sub PaintTargetCharacter() Dim FoundCell As Range, FoundCell2 As Range Dim Addr As String Dim Addr2 As String Dim SearchArea As Range Dim SearchArea2 As Range Application.ScreenUpdating = False ActiveCell.Interior.ColorIndex = 0 '検索対象範囲 Set SearchArea = Worksheets("G番情報").Range("AE6:BG6") '検索実行 Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub Set SearchArea2 = Range(FoundCell.Offset(1, 0), FoundCell.Offset(33, 0)) Set FoundCell2 = SearchArea2.Find(What:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell2 Is Nothing Then Exit Sub FoundCell2.Copy Destination:=ActiveCell Application.ScreenUpdating = True End Sub 当然、特定のセルで値を入力後エンターキーを押すとアクティブセルは下に下がってしまうので Private Sub Worksheet_Change(ByVal Target As Excel.Range) Target.select Call PaintTargetCharacter End Sub としているのですが Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) の部分でエラーが起きてしまいます。 また停止してシートに戻るとセルのカーソル表示が消えてしまいます。 この現象はシートを閉じて再度開くと直りますが なにかエラーと関係しているのでしょうか? 初心者なのでおかしな部分が多々あると思います。 ご指摘などあれば宜しくお願いします。

  • EXCEL2003 VBAのテキストボックス

    ユーザーフォームからの入力・操作のみでシート上の住所録を編集出来るものを作ろうとしております。 テキストボックスの値の操作についての質問なのですが、端的に説明しにくいので自分で記述したコードと共に説明させていただきます。 シートはA列に氏名、B列に住所が入るようにし、100件のデータを格納出来るようにします。1行目はタイトルです。 セル範囲の名前は以下のように定義付けしています。  A2:A101 「氏名」  A2:B101 「住所録」 ユーザーフォームには以下のオブジェクトを配置しております。  「名前」入力・出力用テキストボックス(オブジェクト名:TB1)  「住所」入力・出力用テキストボックス(オブジェクト名:TB2)  名前検索用コンボボックス(オブジェクト名:CMB)  「追加」コマンドボタン(オブジェクト名:CB1)  「訂正」コマンドボタン(オブジェクト名:CB2) まずは新規データの入力。テキストボックス(TB1, TB2)に入力した後の「追加」コマンドボタン(CB1)クリック時の処理は以下のコードでうまくいっております。 Private Sub CB1_Click() Range("A65536").End(xlUp).Select Selection.Offset(1, 0).Select Selection = TB1 Selection.Offset(0, 1).Select Selection = TB2 Range("住所録").Sort _ Key1:=Range("A2"), _ Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin End Sub 同じテキストボックス(TB1, TB2)を使いデータの訂正をする為、コンボボックス(CMB)に以下のコードを記載しました。 尚、コンボボックスのRowSourceは「氏名」です。 Private Sub CMB_Change() Dim AA As String AA = CMB.Value TB1.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 1) TB2.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 2) End Sub これでコンボボックスで選択した名前からテキストボックスに名前と住所を表示することができました。 ここからが上手くいきません テキストボックスに表示された文字を同じテキストボックス上で変更し、変更後の情報を「訂正」コマンドボタン(CB2)クリックでシート上に送るために以下のコードを記述しました。 Private Sub CB2_Click() Dim BB As String BB = CMB.Value Dim CC As Range Set CC = Range("氏名").Find(what:=BB, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows) Cells(CC.Row, CC.Column).Select Selection = TB1 Selection.Offset(0, 1).Select Selection = TB2 Range("住所録").Sort _ Key1:=Range("A2"), _ Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin CBM.ListIndex = -1 End Sub これを実行してもシートには訂正後の情報が反映されず訂正前の情報が入ってしまいます。 ここで訂正後の情報を反映させるためにはどうしたらよろしいのでしょうか。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • 続)ユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果保存

     以前に,エクセルファイルを閉じても,再度ファイルを開いたときに,閉じる前のユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果を再表示させる方法をお教えいただき,そのご指導のもとコントロールの状態を、シートに保存しておく方法で作業を進めていました。 しかし,次の2点の問題が新たに出てきました(><)。いろいろと自分なりに考えて見ましたが,解決できず再度投稿させていただきました。 問題1.ユーザーフォームに「ラベル」・「イメージ」・「マルチページ」等があると,エラーが発生します。 問題2.「コンボボックス」は,保存したコントロール状態は再表示するのですが,リストを読み込まず,コンボボックスでほかのものが選択できない事になってしまいます。 大変、恐縮なのですが、どなたか解決策をお教えください。 何卒、よろしくお願いいたします。 例)UserForm1にチェックボックス、オプションボタン、トグルボタン、テキストボックス、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を作る。SHEET2のセル(E1:E5)にコンボボックスのリストを作る。こうしたユーザーフォームの結果をフォームを閉じる時にシート(dataという名前をつけています)に保存し、フォームを開く時に、値を読み込みこませるようにしました。(、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を省くと以下のコードで問題なく作動します。) '☆標準モジュール Sub test() UserForm1.Show UserForm1.ComboBox1.List = Sheets("sheet2").range("E1:E5").Value End Sub '☆ UserForm1のモジュール Private Sub UserForm_Initialize() Dim srcRange As Range Dim myCell As Range Set srcRange = ThisWorkbook.Sheets("data").Range("A1").CurrentRegion For Each myCell In srcRange.Columns(1).Cells Me.Controls(myCell.Value).Value = myCell.Offset(0, 1).Value Next myCell End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim myCtrl As Control Dim destRange As Range Set destRange = ThisWorkbook.Sheets("data").Range("A1") destRange.Parent.Cells.Clear For Each myCtrl In Me.Controls With destRange .Value = myCtrl.Name .Offset(0, 1).Value = myCtrl.Object.Value End With Set destRange = destRange.Offset(1, 0) Next myCtrl End Sub

  • ユーザーフォームの入力をシートに反映

    かなりの初心者(始めて3日)ですが宜しくお願いします。 しかも2点あります。。。 (1)ユーザーフォームにある大量のテキストboxないし、optionboxをエクセルのsheet2に反映させたいです。 で、地道に With Sheets(2) .Range("A22").Value = OptionButton184.Value .Range("A23").Value = OptionButton185.Value .Range("A24").Value = OptionButton186.Value .Range("A25").Value = OptionButton187.Value とAの行を手で直していたのですが、途中で間違えて、手直しは断念しました。そこで、思いついたのが、「ひとつ下のセルに記述する」ということでした。 で、本を見ながら考えたのが、 With Sheets(2) Range("A1").Select ActiveCell.Offset(1, 0).Value = TextBox1.Text ActiveCell.Offset(1, 0).Value = TextBox2.Text ActiveCell.Offset(1, 0).Value = TextBox3.Text まずA1を指定させて、下にずらしていけるかと思ったのですが、全然上手くいきません。しかもsheet1のA1を選択してるようです。どうしてでしょうか??? (2)フォームOKボタンを押して、上記の処理をしても、フォームに記入したものが次にフォームを開いた時に消えていないように、 Me.Hide End Sub で終わらせたのですが、次に開いても残っていません。 無知でお恥ずかしいですが、宜しく御願い致します。

  • エクセルでデータの比較をしたいです。お教え頂けないでしょうか

    エクセルでデータの比較をしたいです。お教え頂けないでしょうか エクセルで2つのシートにある同一の商品コードと 在庫数を比較するマクロを作成中です。 シート1のA列にある商品コードとB列にある在庫数を取得し シート2のA列にある商品コードから同じ商品コードを探します。 同一の商品コードがあった場合に在庫数を比較して その数が減少していなければC列に次の処理を加える。  商品コードが合致した後は 処理を抜けて次の商品コードを比較させたいのですが 下行にある商品コードを探し続けてしまいます。(データの総当りとなる) つきましては どの様に記述すれば良いのでしょうか お教え頂けます様 よろしくお願い致します。 *********** Sub check1() Dim kz1 As long 'シート1データ数 Dim kz2 As long 'シート2データ数 Dim st1 As String 'シート名 Dim dt1 As Variant '商品コード Dim dt2 As Variant '在庫数 Sheets("sheet1").Select st1 = ActiveSheet.Name kz1 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For a = 0 To kz1 - 2 Sheets(st1).Select dt1 = ActiveCell.Value '商品コード dt2 = ActiveCell.Offset(0, 1).Value '在庫数 Sheets("sheet2").Select kz2 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For b = 0 To kz2 - 1 '同一商品コードを検索 if activecell.value = dt1 '在庫数を比較 if activecell.value >= dt2 '在庫数が同じ もしくは増加していた場合に処理 '次の処理を追加 endif else ActiveCell.Offset(1, 0).Select endif Next b Sheets(st1).Select Next a end sub

専門家に質問してみよう