自分なりに 作成してみましたがどうもうまくいきません。
Sub 変換()
Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Dim r As Range
Set Sh1 = Worksheets("1")
Set Sh2 = Worksheets("2")
Set Sh3 = Worksheets("3")
Sh3.Select
Set c = Cells.Find(What:="9876543", LookAt:=xlWhole)
c.Offset(, 1).Activate
ActiveCell.Replace What:="中田", Replacement:="中田英寿"
End Sub
このように作成しましたがうまくいきません。恐らくsheet3のデータはsheet1から( =1!A100 )といったように値を他のsheetから持ってきてるからではないんでしょうか?
No.7ベストアンサー
- 回答日時:
こんばんは。
Wendy02 です。
#6 さんの言葉を参考にさせていただきました。
>3.=1!A100の式はそのまま生かし表示だけを"中田英寿"にしたいのでしょうか?
3のタイプで作ってみたものの、どうなのかなぁって思います。だいたい、Sheet名が、「1」 とか、「2」とか、特殊なものを作る、その分のエラー処理が増えます。一挙に複雑なコードになってしまいました。
Sub 変換Sample2()
Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet
Dim c As Range, myNo As String, mySearch As String, myRep As String
Dim myFormula As String, strSh As String, strRng As String
Dim SheetFlg As Integer
myNo = "9876543"
mySearch = "中田"
myRep = "中田英寿"
Set Sh1 = Worksheets("1") '必要あるのかな?
Set Sh2 = Worksheets("2") '必要あるのかな?
Set Sh3 = Worksheets("3")
Sh3.Select
Set c = Cells.Find(What:=myNo, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then
MsgBox myNo & " の番号が見つかりません。"
Exit Sub
End If
With c.Offset(, 1)
If .Value Like "*" & mySearch & "*" Then
If .HasFormula Then
myFormula = .FormulaLocal
SheetFlg = InStr(myFormula, "='")
On Error GoTo ErrHandler
strSh = Mid$(myFormula, 2 + SheetFlg, _
Len(myFormula) - InStr(myFormula, "!") - 2-SheetFlg)
strRng = Mid$(myFormula, InStr(myFormula, "!") + 1)
Worksheets(strSh).Range(strRng).Value = myRep
Else
MsgBox " 番号の隣は、" & mySearch & "ではありません。"
GoTo ErrHandler
End If
End If
End With
ErrHandler:
If Err.Number > 0 Then
MsgBox "数式の取得に失敗しました。", vbCritical
End If
Set Sh1 = Nothing: Set Sh2 = Nothing: Set Sh3 = Nothing
End Sub
No.6
- 回答日時:
#2です。
1.結果としてどういう処理にしたいのでしょうか?
2.Sheet1の元データを変換したいのでしょうか?
それともsheet3の=1!A100の式を変換後の文字列で上書きしていいのでしょうか?
3.=1!A100の式はそのまま生かし表示だけを"中田英寿"にしたいのでしょうか?
2の場合は関数と文字が混在した列になってしまうのですが、今後内容が変わらず関数にしておく必要がないのであれば名前の列全体を実際の文字列に置き換えてはどうでしょうか?
3の場合は単なる応急処理になり後々を考えると面倒になりそうです。
No.5
- 回答日時:
ステップで実行して Set 発見セル=・・の行を実行してからとめて デバッグのイミディエイトで
?発見セル.Offset(, 1).Formula とすると "='1'!A100" を得られる。
"='1'!A100" は Replace の置き換え対象の語句を含まない ので レンジに対する Replace では変換しない。
発見セル.Offset(, 1).Replace What:="A100", LookAt:=xlpart,Replacement:="A101" とすれば式を変換する。
?発見セル.Offset(, 1).Value で "中田" を得るのでセルのvalueを置き換える 。 式:参照は破棄 なので表などが乱れる可能性があり 元を変換したほうが後腐れないかも。
参照元を辿って変換するなら "='1'!A100" でシート名、レンジを参照・・
Sub 変換()
Set Sh3 = Worksheets("3")
Set 発見セル = Sh3.Cells.Find(What:="9876543", LookAt:=xlWhole)
If Not 発見セル Is Nothing Then
セルの式の結果 = 発見セル.Offset(, 1).Value
発見セル.Offset(, 1) = Replace(セルの式の結果, "中田", "中田英寿")
End If
End Sub
No.4
- 回答日時:
Sub 変換()
Dim Sh1 As Worksheet
Dim h2 As Worksheet
Dim Sh3 As Worksheet
Dim r As Range
Set Sh1 = Worksheets("sheet1")
Set Sh2 = Worksheets("sheet2")
Set Sh3 = Worksheets("sheet3")
Sh3.Select
Set c = Sh3.Cells.Find(What:="9876543", LookAt:=xlWhole)
c.Offset(, 1).Activate
ActiveCell.Replace What:="中田", Replacement:="中田英寿"
End Sub
9876543中田を造って
実行すると
9876543中田英寿
となり、うまくいきました。
No.3
- 回答日時:
こんばんは。
Wendy02 です。#2 さんのご指摘にもありますが、
Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Dim r As Range
行が赤くなってエラーが出て気が付くはずですが。
それから、r という変数は出てきませんね。
>Set Sh1 = Worksheets("1")
・
・
確か、前回のお話では、「シートの何番目」という書き方をされていたと思いますが、もし、そうなら、そこは文字列ではありません。
Set c = Cells.Find(What:="9876543", LookAt:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1).Replace What:="中田", Replacement:="中田英寿"
End If
とぐらいは、エラー処理はしてもよさそうだと思いますね。
この回答への補足
いつもありがとうございます。
大変申し訳ないのですが、他のsheetから持ってきてるといううのは ”中田” 名前を( =1!A100 )といった感じにしており、その他のsheetから持ってきたデータを”中田英寿”といった感じに変換したいとおもっています。
すいませんが、よろしくお願いします。
No.2
- 回答日時:
=1!A100でsheet1から持ってきているのは"9876543"の文字列ですよね?
それであれば問題なく動きます。
また、実際のシート名も"1"、"2"、"3"になっていますよね?
この記述で誤りがあるとすると最初のDim文でrの前に再びDimを記述している事くらいでしょうか?
実際のデータ形式が判らないのではっきりとは言えませんが自分で適当に入れたデータでは上記の点を修正すればちゃんと動作しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
EXCELで、結合されたセルに連続...
-
エクセル ボタンを押すとセルの...
-
セルを結合した場合の関数(COU...
-
セルの値を取得してSQL文に組み...
-
Excel 離れたセルへの連続デー...
-
エクセルでセルをクリックして“...
-
エクセル 結合セル内に空白なら...
-
曜日を判定して、曜日ごとに特...
-
VBAで結合したセルがクリアでき...
-
「数式は隣接したセルを使用し...
-
VBAで “:” を含むセルの特定
-
エクセルで片方のセルに入力し...
-
EXCEL VLOOKUP的コメント自動表示
-
エクセルで作業した日の日付を残す
-
Excel2007 セルの削除について
-
判定結果に応じて〇印(図形)...
-
エクセルのCOUNTIF関数で演算子...
-
エクセルで過去の日付けの入っ...
-
エクセルVBAでセルのFormulaHid...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
エクセル ボタンを押すとセルの...
-
EXCELで、結合されたセルに連続...
-
セルを結合した場合の関数(COU...
-
エクセルで片方のセルに入力し...
-
VBAで結合したセルがクリアでき...
-
Excel 離れたセルへの連続デー...
-
セルの値を取得してSQL文に組み...
-
【EXCEL】条件に合致するセルの...
-
Excelでnullになるような式のセ...
-
エクセルで作業した日の日付を残す
-
エクセルでセルをクリックして“...
-
Excel セルを結合したものを抽...
-
Excelの表に自動でナンバリング...
-
VBAで困っています。
-
エクセルでたくさんのセルを小...
-
エクセル 結合セル内に空白なら...
-
EXCEL セル結合したセルを参照...
-
Excelのカウントアップボタンに...
-
エクセルでチェックボックスを...
おすすめ情報