- ベストアンサー
VBAで修正ボタンを作成
先ほどは登録ボタンを作成したのでが、 修正ボタンもあれば便利だと思い作りたいのですが 一向にできません。 一覧表より、番号を検索して一致するセルの場所に 上書き?保存をするようにしたいのですが どのようにすればよいでしょうか? 先ほどから新たに訂正を加えたのですが、 やはりダメでした。 Private Sub CommandButton2_Click() '修正ボタン Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 'マッチ Range("F2").Select n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = n '送り方 sh2.Cells(n, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(n, 23).Value = sh1.Cells(5, 3).Value MsgBox "修正できました。" End Sub よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
NO.4間違えました。ごめんなさい。 n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" のところを ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" n = ActiveCell.Value にしてみるとどうでしょうか? ActiveCellがだめな場合はRange("F2")とか、 Cells(2,6)(F2のセル位置)にしてみたりしてください。
その他の回答 (4)
- cma3atgoo
- ベストアンサー率35% (32/90)
セルの関数の結果が取得できていないようですね。 n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = n のところを ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = ActiveCell.Value にしてみるとどうでしょうか?
- cma3atgoo
- ベストアンサー率35% (32/90)
簡単な処理の概要としては、 一度、現場登録検索のシートのF2セルに =MATCH(RC[-1],一覧!C[-5],0) の結果を表示し、 その結果によってセルに値を入れる ということでよいでしょうか。 この場合、F2セルに正しい値が出ているでしょうか? 自分の期待した数値?が出ていなければ、 1.関数が実行できていない(セルの書式設定が文字列など) 2.関数の結果が出ていない(値が出ない、関数が間違っている) 3.セルの指定が間違っている(rangeの指定法が違う、シートが違う) などのことが考えられますし、 逆に、値が正しければ、 最後に値を設定するところがおかしい ということになりますよね。 うまくいっていない場所のあたりをつけるところからやってみてはどうでしょうか。
補足
'マッチ関数で探す Range("F2").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!R[-1]C[-5]:R[1998]C[-5],0)" ↑ =MATCH(E2,一覧!A1:A2000,0)の意味です。 関数はうまく動いているように思います。 値もしっかりでています。 '得意先CD sh2.Cells(n, 2).Value = sh1.Cells(2, 3).Value ↑ ここの部分がおかしい。 '現場CD sh2.Cells(n, 3).Value = sh1.Cells(3, 3).Value MsgBox "修正できました。" End Sub 結局、シート一覧は 検索CD 得意先CD 現場CD 得意先名 検索1 よみがな 現場名 検索2 よみがな 郵便番号 住所1 住所2 TEL FAX 宛名1 宛名2 郵便番号 住所1 住所2 TEL FAX 送り方 封筒 営業担当 営業担当 締め日 NK請求 伝票類 継続 指定 Excel 表紙 注意書き 終了日 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 A5~BB5まで横にずらずらと上記の項目があり 入力しずらいので、シート2に現場登録などという 縦に項目を並べて1シート内でバーを動かさないで すむようにしたいのです。 現場のコードが2000件ぐらいになります。 日々変更と更新があるので困っています。 アクセスがいいのはわかっていますが 会社にはありません。 又、登録ボタンと検索ボタンはできたので 検索で表示させた内容から、修正して 一覧に(入力)登録できればとっても便利なので がんばってなんとかしたいのです。 助けて下さい。
- Samurai-Jack
- ベストアンサー率18% (130/697)
実行する際に、VBEの画面から「デバック」「ステップイン」で実行してみて、cnt1 = nの部分でnにカーソルをあてて、nの値を確認してみてください。nには値が設定されているでしょうか? nに値が設定されていれば、代入はされるはずです。
補足
"ステップイン"やってみました。 : n : エラー 2042 : Variant/Error でした。(>_<) だめと言うことですね。 nをはずすと、関数としてF2にしっかりと値は入るのですが・・・。 代入のが変なのでしょうか?
- cma3atgoo
- ベストアンサー率35% (32/90)
初めて見るのでちょっとよくわかりませんが、 Range("F2").Select のところが少し違和感があります。 どのシートなのか? 範囲指定の方法はこれであっているか? 的外れだったらすみません。
補足
説明が悪くてすみません。 Range("F2").Select は現場登録検索のシートです。 とりあえず、=MATCH(E2,一覧!A:A,0) で一覧のどのセル番地か調べて、nに代入すると言うのを考えたのですが、 sh2.Cells(n, 22).Value = sh1.Cells(4, 3).Value 上記がデバックになります。 どうしたらいいのでしょうか?
お礼
ありがとうございました!!とっても感動です!! すごいです。\(^o^)/ これで楽になります。 ほんとうに感謝です。 <m(__)m>