電子書籍の厳選無料作品が豊富!

土日中で完成させないといけないものがあって急いでいます。
水曜日から、初めてマクロについて勉強しだして、結構むちゃぶりですが、
仕事で必要だから作ってほしいといわれました。

そこで大量の数字の置換方法と、列から列への代入?方法が知りたいです。

私が作っているのは会計ソフトに、別の会計ソフトからの仕訳データをCsvで取り込むために、
取り込みデータ用に変換するマクロを作成中です。
とてもたくさんあるのですが、一部例を載せます。

L列            N列
借方消費税区分コード   貸方消費税区分コード
31
             82
             82
31



のようになっています。
L列の数字をF列に、N列の数字をI列に持っていきたいです。
その際、この数字は前の会計ソフトのコードのため、新しいソフトのコードに変換が必要です。
これは移動が先でも、置換が先でも大丈夫です。
最終的に借方のコードが変更後のコードでF列にあれば問題ありません。

置換前コード      置換後コード
11 課税売上      10 課税売上
12 非課税売上     34 非課税売上
31 課税仕入対課売   40 課税仕入(課税売上にかかる仕入)




と結構な量があります。

シート2に置換リストを使って置換する方法もネットで調べましたが難しくて理解ができておりません。

もう少しわかりやすく、やり方を説明していただきたいです。
よろしくお願いします。

質問者からの補足コメント

  • コードのみです!
    コードは、3桁には絶対なりません。

    No.6の回答に寄せられた補足コメントです。 補足日時:2020/10/16 14:57

A 回答 (12件中1~10件)

こんばんは!



理屈抜きで、とりあえずコードだけ・・・

↓の画像のようにSheet2に置換前後の文字列データの表を作成しておくとします。
元データはSheet1としています。

標準モジュールにしてください。

Sub Sample1()
 Dim i As Long
 Dim wS As Worksheet
  Set wS = Worksheets("Sheet2")
   With Worksheets("Sheet1")
    '//▼Sheet1のL・N列をF列・I列にコピー&ペースト//
    .Range("L:L").Copy .Range("F1")
    .Range("N:N").Copy .Range("I1")

    '//▼ココから操作//
    For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
     .Range("F:F,I:I").Replace what:=wS.Cells(i, "A"), replacement:=wS.Cells(i, "B"), lookat:=xlWhole
    Next i
   End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
「マクロ超初心者です。」の回答画像11
    • good
    • 1

コードの読み替えは比較的簡単に実現できると思いますが、最終的にCSVで出力する必要があるんですよね?


であれば、新の会計ソフトで読み込める形式でCSVが出力できるかを早めに確認しておいた方が良いですよ!!
文字項目はダブルクォーテーションで括るとか括らないとか。前ゼロはサプレスしても良いとか、ダメだとか。
その辺を確認した上で、コードの読み替えを検討しても遅くないと思います。
とりあえず、手作業で変換してみてCSVを作成し、新会計ソフトで取り込みを行ってみることをお勧めします。
    • good
    • 6

まずは、No.1のお礼を読んでのアドバイスです。



>事務所で作成できる人がいないことと、勉強も兼ねて作ってほしいとのことでした。

そんな物に期限を付けるの?
気長に作るならともかく、休み明けまでに作れって、それは変。
それに、マクロで計算した数字は別の手段で確認するなら、マクロ化する必要すらないのではないのかな。

目的と手段がおかしなことになってますよ。
今一度会社でお話をされることを勧めます。

・・・本題・・・

具体的にどの処理が分かりませんか?

マクロとは言え、これプログラミングですから。
ちゃんとしたアルゴリズムを作る必要があります。
それは出来ていますか?
代わりに作って欲しいという事であれば、そのアルゴリズムを示してください。
「このデータをこんなデータに置き換えたい」
では、アルゴリズムからコードまで全部作ってくれと言う事になります。
申し訳ありませんが、それ…【作業依頼】であって【質問】ではありません。

作業依頼なら専門家に委託しましょう。
お手軽に済ませるなら、
ココナラ
 https://coconala.com/
なんて委託サイトもあります。

勉強がてら……ということであれば、まずはアルゴリズムについて勉強しましょう。
※ これ、マクロを勉強するうえでの真面目な回答です。

・・・
てか、マクロにする必要すらない処理です。
数式で処理できます。
 11→10
 12→34
 31→40
と置き換えたいなら、
一覧表に
 A列 B列
 11  10
 12  34
 31  40
としておき、
VLOOKUP関数で置換前のコードの値でA列の値を検索して、B列の値を返せば良い。
(数字だけの表を示しましたが、コードに数字と名称が含まれるなら、
 数字と名称を含んだ表を作ってください)

質問を見ると、マクロ以前の問題と思うんです。
仕事だけど手を煩わせたくない。ただで代わりにやって欲しい…‥そんな印象を受けます。
    • good
    • 2

No.5です。



>と結構な量があります。

と質問文にはありますのでセルの値を調べてからの置換は誤置換は防げてもIf文がどれ程の量必要になるのか?は初級レベルですが気になりました。

そもそも対応表が作成できるのであれば『置換前コード』をkeyに『置換後コード』をitemにしたDictionaryオブジェクトの方をお勧めはしますが、この一件でミスがあった場合の責任は取れませんのでコードは控えます。

その昔VBA未経験時にGW中でデータベース作成を指示され、出来なければ配置転換と言うトップダウンに必死でしたから、今回出来ない(実際どうなっているか現物が不明)場合が恐ろしやぁ~ですね。
    • good
    • 0

こんにちは、


>土日中で完成させないといけないものがあって急いでいます。
時間が無くマクロの理解、知識もないなら、時間の無駄になる前に
Excelの機能を使い、計算(一時抽出)用 列やシートを作成して
手作業でコピペや機能(関数、フィルタ、置換、ソートなどなど)
行った方が良さそうですね。最も同じ作業の繰り返しを行うなら
部分的に自動記録のマクロを活用する等することも良いと思います。

いずれにしても、
>とてもたくさんあるのですが、一部例を載せます。

一部の例を開示して処理するコードを見ても他の例に直せないでしょうし
すべての例やデータは当然開示できないでしょうし、、、
すべてを開示できれば、作っても良いですが、おそらくその場合、今後、
あなたに死ぬほどの出来ない事を押し付けられ苦しむのは、目に見えています

マクロを覚える(誰かに作ってもらう)事はあきらめて
作業を責任範疇にある皆さんで手分けして間に合わせた方が良いと思います。マクロでなくともできるので、、
    • good
    • 0

No.6 (=No.3)です.



No.6で,「No.2 です.」と書きましたがNo.3でした.すみません.

(こんなんではプログラムも ミスしてしまいそう・・・)
    • good
    • 0

No.2 です.


念のために尋ねますが,置換したいのは 数字だけ ですよね?
そのつもりでNo.2のVBAを書きましたが.

No.2のサンプルコードをそのままVBAに張り付けて実行してみてください
「'」から後ろは「コメント」なのでプログラムに影響しません.

それと,
No.2 では 置換する行を 2~30 にしていますが,30ではなくて十分に大きな数にしておく必要があります
そうしないと,No.1さんが心配されているような事態になってしまいます
ご注意ください.
この回答への補足あり
    • good
    • 0

11 を 10 にって。

置換前がたくさんあると言う点から、
111 が存在する可能性は?と回答者は気にしますね。
12 と 112 とか。

そうなると誤置換の危険はありますから、少なくとも置換を利用するのはどうなのかな?
項目名が相応同じであればそちらを基準にする方が安全かもですけど、質問文にある例題3行目
『31 課税仕入対課売   40 課税仕入(課税売上にかかる仕入)』
は該当できないって事になるかな?
    • good
    • 0

出来る人がいない=あなたもできない ですよね


そのパターンはドツボにはまるパターンです
やめたほうがいいと 忠告しておきます

それとは別の話しで、
規則性をまず見つけます 
処理的にはループと置換(Replace関数)と判定の組み合わせです
あと 判定する範囲(左から何番目までとか)
但し、置換は 想定外の処理になることがあります
置換するには比較が必要です
スペースがある場合、
大文字小文字、
半角全角
漢字の場合は似たような違う漢字
数字に見えるものは文字列なのか数字なのか
これらの処理をよく考える必要があります
    • good
    • 0

とりあえず,わかりやすいように書いてみました


L列をF列にコピーして 1行目から30行目までを置き換え(11→10,12→34,31→40)

参考にはなるでしょうか


Sub test()
Dim retu As String
Dim i As Long

retu = "F" '貼付け先の列 (ここではF列)

Columns("L").Copy ' L 列をコピー
Columns(retu).PasteSpecial (xlPasteAll) ' 貼付列に貼り付け
Columns("L").Delete ' L 列を削除

For i = 1 To 30 ’1行目から 30行目まで
If Cells(i, retu) = 11 Then ' もしも11なら
Cells(i, retu) = Replace(Cells(i, retu), 11, 10) ' 11を10に置き換え
ElseIf Cells(i, retu) = 12 Then ' もしも12なら
Cells(i, retu) = Replace(Cells(i, retu), 12, 34) ' 12を34に置き換え
ElseIf Cells(i, retu) = 31 Then ' もしも31なら
Cells(i, retu) = Replace(Cells(i, retu), 31, 40) ' 31を40に置き換え
End If
Next i

End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!