在庫管理のデータで1万件ほどあります。
データの中に下記のようにいくつかの列があります。
[商品名] [種別1] [種別2]・・・
CC123 A01 BB281
RT426 A02 BB456
と続いていくのですが、種別2にあるデータを種別1にあるデータに変換をしたいです。
具体的には、
種別2にあるデータ”BB281”を列を変えずに種別1にある”A02”に変換したいのです。
[商品名] [種別1] [種別2]・・・
CC123 A01 A02
RT426 A02 BB456
修正後は上記のようになるといいのですが、やり方がわからず・・。
同じ種別1の列にあるものは
ActiveSheet.Columns(2).Replace What:="B111", Replacement:="C6505"
と書いて済ませていたのですが、違う列にするときはどうしたらよいか教えてください!
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
行数が変わるので別シートに出力します。
元がSheet1で出力がSheet2です。
1行目が項目名とします。Sheet2も項目名だけは先に入力しておいて下さい。
[商品名] [種別1] [種別2]・・・
なのでデータは種別2より右もあるのでしょうが、それは考慮していません。
Sheet2にも出力しません。ここが必要でご自分でコードを修正できなければ、下記2点を補足して下さい。
1.横にどこまで項目をつけるのか。
2.データが変換により2行になった時、その右部分はどうするのか。
Sub Sample()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim i As Long, j As Long
Dim w_find As Variant
Dim w_rep As Variant
Dim cnt As Integer
w_find = Array("BB281", "BB501", "ZA441", "ZA551", "1322A")
w_rep = Array("A02", "A02", "Z23", "Y12", "C11")
Application.ScreenUpdating = False
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
j = 1
With sh1
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
j = j + 1
sh2.Range("A" & j).Value = .Range("A" & i).Value
sh2.Range("B" & j).Value = .Range("B" & i).Value
'変換コードがあるかチェック
For cnt = 0 To 4
If .Range("C" & i).Value = w_find(cnt) Then
'あった時
j = j + 1
sh2.Range("A" & j).Value = .Range("A" & i).Value
'入れ替えたもの
sh2.Range("B" & j).Value = w_rep(cnt)
Exit For
End If
Next cnt
'なかった時
If cnt = 5 Then
sh2.Range("C" & j).Value = .Range("C" & i).Value
End If
Next i
End With
Application.ScreenUpdating = True
sh2.Select
End Sub
jmuinyさま
ありがとうございます!!!
前後のスクリプトのせいで、一瞬だめかと思いましたが、少し直したら
いけました!!!すごいですーーー!
ありがとうございます!
こんな説明不足な質問に根気よく付き合っていただいて本当に助かりました。
ありがとうございました!
もちろん!ベストアンサーで^^
No.3
- 回答日時:
5つ限定ならIF文が長くなりますが、それでいいなら書けます。
コードをお望みならその5つのパターンを具体的にして下さい。
それとちょっと気になるのですが、
[種別1] [種別2]・・・
となっていますが、種別3以降もこの処理の対象になるのですか?
つまり
[商品名] [種別1] [種別2] [種別3]
CC123 A01 ZZZ BB281
のようなものがありますか?あったらどのように表示したいのでしょうか、という質問です。
3行にする??
そこまで考えると結構複雑になってしまいます。
要件がきちんと決まって理解できたらコードを作成します。
jmuinyさま、お返事が遅くなってしまってごめんなさい!
お礼を書いたはずだったんですが、確認画面で終わらせてしまったようです、ごめんなさいー!
5つのパターンは以下の通りです。
BB281→A02
BB501→A02
ZA441→Z23
ZA511→Y12
1322A→C11
そして変換したいBB281たちのデータは必ず種別2に入っていて、
変換後のデータは種別1に必ず入っています。
こんな感じなのですが、十分な説明になっていますでしょうか。
ほんとにごめんなさい。もしお時間あればよろしくお願い致します!
No.2
- 回答日時:
>種別2にある「BB281」は種別1にある「A02」と内容がほぼ同じなので
これは、内容がわかっている人だけに通じる事ですよね。
何をもってほぼ同じとすればいいのでしょう。
変更したい番号の対応表を作成して、それを元に入れ替えていく方法にしないと無理です。
つまり
A列__B列
BB281_A02
CC111_A03
のような表を作成する必要があるという事です。
変更が3つくらいまでなら、IFでやってしまってもいいと思いますが。
替えたいものはいくつあるのですか?
そうですよね(>_<)内容を知らない人にはわからない説明でした。
すいませんー!
変換したいものは多くなくいのですが、全部で5つになります。
Ifでいけそうでしょうか?
No.1
- 回答日時:
「BB281」が「A02」になる条件は何ですか?
この変換だけの固定なら
IF Range("C" & i).Value = "BB281" Then
Range("C" & i).Value = "A02"
End if
を繰り返すだけでいいですが、他にも変換したいものがあるのですよね。
その規則がわかりません。
さっそくの回答ありがとうございます!
そしてすばらしいご指摘・・・そうですよね、規則がわからないですよね。
すいません。自分自身、整理しなければいけないデータが多すぎて混乱していました。
もう一度整理して、訂正させてください。
何をしたいかというと、
種別2にある「BB281」は種別1にある「A02」と内容がほぼ同じなので
「A02」と一緒にしてしまいたい、というのがやりたいことです。
つまり、
[商品名] [種別1] [種別2]・・・
CC123 A01 BB281
RT426 A02 BB456
の状態を
[商品名] [種別1] [種別2]・・・
CC123 A01
CC123 A02
RT426 A02 BB456
としたい、ということでした・・・。
素人説明で恐縮です。よい方法があればぜひ教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
ふりがなをアルファベット化す...
-
セル内の文字列が日本語か英語...
-
S-JIS → JIS コード変換するには
-
「彡」って文字はなんという文...
-
sedで日本語の置換方法について
-
XMLデータの中の改行コードにつ...
-
友人とのラインで 「~MBと書く...
-
VBScript ASC関数:文字エンコ...
-
std::stringからLPCWSTR型への変換
-
ビット反転(Not)が機能しない
-
VB6.0で小数10進数を16進数に変...
-
数値のパック10進数の変換に...
-
Symfowareでのデータ型変換につ...
-
COBOLによる全角・半角混...
-
ExcelVBA実行後に時々落ちる
-
C#で16進数からASCIIへの変換の...
-
CString ←→ BSTRの変換について
-
C言語でUTF-8コードで読み込ん...
-
PL/SQLでSJISの文字コードを取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
友人とのラインで 「~MBと書く...
-
std::stringからLPCWSTR型への変換
-
英数字を含む文字列(0-9,A-Z)...
-
ExcelVBA実行後に時々落ちる
-
Excelマクロにて30分単位の計算...
-
ふりがなをアルファベット化す...
-
sedで日本語の置換方法について
-
S-JIS → JIS コード変換するには
-
VS 2008(VB.NET)
-
COBOLによる全角・半角混...
-
Symfowareでのデータ型変換につ...
-
CString ←→ BSTRの変換について
-
JIS → S-JIS コード変換するには
-
2バイト文字をJEFからSJISに変...
-
EBCDICをASCIIに変換したい
-
フォームのコントロールのバッ...
-
10進数→2進数への変換
おすすめ情報