こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

重複データーの上書き

行き詰っています。
よろしくお願いします。
下の構文では、
エラー:オブジェクトは、このプロパティまたはメソッドをサポートしていません
と、表示されます。

”コンボボックス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

投稿日時 - 2016-04-18 10:24:04

QNo.9160309

すぐに回答ほしいです

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

まず、質問するのだから、読者(回答者)にどういうことをしたのか、文章で説明するのが礼儀だろう。
ーーー
たとえば
ユーザーフォームを使う。そこへ
コンボボックス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
データ
aXXXxvb
b
c
ーーー
>Sheets("AA")
シート名に.空白を含めているということか。
質問のようなときに、余り特殊な例は出さないようにしてほしい。
メインでない、問題点が拡がってしまう恐れがある。
http://www.excel.studio-kazu.jp/kw/20060814154532.html
シート名の中に空白を含めるのはお勧めじゃない。

投稿日時 - 2016-04-18 18:39:06

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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」を追加するテスト仕様にした。
結果 データ
aXXXbcghj
b
c
b
c
d
aXYZbcghj
c
b
c
caXXXbghj
ーー
行ったテストデータが少数なので、間違いがなければよいが。

投稿日時 - 2016-04-18 20:47:08

ANo.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で置き換えたい(上書きには相違ないが、置き換えるや値を代入とか言うのでは) 
という表現がよいのでは。

投稿日時 - 2016-04-18 11:10:04

お礼

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

投稿日時 - 2016-04-19 07:12:31

ANo.1

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

投稿日時 - 2016-04-18 11:00:23

お礼

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

投稿日時 - 2016-04-19 07:08:32

あなたにオススメの質問