• ベストアンサー

excelで複数行単位で置換する

Microsoft Excelの質問です。 1~9までのある数値が 約5000行にわたって入力されている列があるのですが、 その中から 1 2 3 4 5 と連続しているパターンの部分のみ 1 2 3 2 1 というパターンに置換したいのですが、 どのようにしたら良いでしょうか?

noname#116092
noname#116092

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A列に数値が並んでいるとします。 D1セルからD5セルには1,2,3,4,5を入力し、E1セルからE5セルには1,2,3,2,1と入力します。 B1セルには次の式を入力してCtrl+Shift+Enterキーで確定します。 =IF(OFFSET(A1,0,0):OFFSET(A1,4,0)=OFFSET(D$1,0,0):OFFSET(D$1,4,0),OFFSET(E$1,0,0):OFFSET(E$1,4,0),"") 置換をした答えの列の表示はC列に行うこととして、C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(INDIRECT("B"&ROW(A1))=1,E$1,IF(INDIRECT("B"&ROW(A1)-1)=1,E$2,IF(INDIRECT("B"&ROW(A1)-2)=1,E$3,IF(INDIRECT("B"&ROW(A1)-3)=1,E$4,IF(INDIRECT("B"&ROW(A1)-4)=1,E$5,A1))))))

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

ぁれっ? 失礼...orz >=IF(A2+1<3,1,IF(A1<=B2,A1,B2+1)) 『A2+1<3』って何...って突っ込まれますね。 =IF(A2<2,1,IF(A1<=B2,A1,B2+1)) でいいです。 左ななめ下のセルが 1 か 空白 だったら 1 。という意図です。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

12345123412312345671234567891234512312111234567891234 このデータはどんな結果が正解なのでしょう。 『1から始まる連続数値があった場合、最後が1で終わるように途中で(折り返すように)漸減させる』 というのが条件ですか? 1,2 の場合は 1,1 で良いのでしょうか。 それを踏まえると 12321122112112343211234543211232112111111234543211221 こういう結果? 『連続が途切れた場合に再び1から始まる』という条件があるなら、 A1:A5000にデータがあり、B1:B5000に数式で結果を出す場合 =IF(A2+1<3,1,IF(A1<=B2,A1,B2+1)) でいいはずです。 マクロでA1:A5000をそのまま書き換えるなら Sub test()   Dim v As Variant   Dim x As Long   Dim n As Long   Dim i As Long   Dim j As Long   On Error GoTo Err_Handler   With ActiveSheet     With .Range("A1", .Range("A1").End(xlDown))       v = .Value       i = UBound(v)       Do Until i <= 1         n = i - v(i, 1)         x = v(i, 1) \ 2         For j = 1 To x           v(i, 1) = j           i = i - 1         Next         i = n       Loop       '.ClearContents       .Value = v     End With   End With   Exit Sub Err_Handler:   MsgBox Err().Number & " : " & Err().Description End Sub こんな感じです。 試す場合はコピーしたテストブックで試してください。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、A1~A5000にかけて数値が入力されていて、置換後の数値をB列に表示する事とします。  まず、B1セルに =$A1 と入力した後、B1をコピーして、B2セルとB3セルに貼り付けて下さい。  次に、B4セルに =IF($A1&$A2&$A3&$A4&$A5="12345",2,$A4) と入力して下さい。  そしてA5セルに =IF($A2&$A3&$A4&$A5$&A6="12345",2,IF($A1&$A2&$A3&$A4&$A5="12345",1,$A5)) と入力して下さい。  最後に、B5セルをB6~B5000セルにコピーして下さい。  これで、B列に置換後の数値が表示されます。  もし、A列のデータを書き換えたい場合には、  まず、A列中のA1~A5000以外のセルの内、データや何らかの設定が有る全てセルをコピーして、B列の同じ行のセルに貼り付けて下さい。(この作業が必要な場合には、上記の数式を入力するよりも先に、前もってシートの上にある列番号欄のAをクリックして、A列全体を選択した後、コピー&ペースト又はオートフィル機能を使って、B列にA列全体の内容をコピーしておいた方が、作業が楽になると思います。)  次に、B列全体をコピーして下さい。  その次に、 A列全体を選択    ↓ マウスの右クリック    ↓ 選択肢の[形式を選択して貼り付け]をクリック    ↓ [形式を選択して貼り付け]ウィンドウの「貼り付け」欄の[値]と、「演算」欄の[しない]にチェックを入れる    ↓ [OK]ボタンをクリック  これで、A列のデータが置換後の数値に、書き換わります。  但し、この方法で列全体を、形式を選択して貼り付けますと、A列の中に数式が入力されていた場合には、その数式が消去されてしまいます。  ですから、A列に数式が入力されている場合には、必要な箇所のセルのみを、コピーして貼り付けて下さい。  ところで、もしも元の数値の中に、 1 2 3 4 5 2 3 4 5 という順番で、数値が並んでいた場合には、置換後の数値は 1 2 3 2 1 2 3 4 5 となってしまい、途中に 1 2 3 4 5 というパターンが現れますが、この場合には、どの様に処理すれば良いのでしょうか。  B列の値のみを、A列にコピーすれば、B列に再度置換が繰り返された数値が表示されますが、今度は元の数値が 1 2 3 4 5 2 3 4 5 2 3 4 5 という順番で、数値が並んでいた部分が、 1 2 3 2 1 2 3 2 1 2 3 4 5 となってしまいますから、切りが無くなってしまうと思います。

noname#116092
質問者

お礼

回答ありがとうございます。 1つ前の方のレスでも申し上げましたが そのようなことにはならないと考えています。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

例えば 1,2,3,4,5,6 と連続していたら 1,2,3,3,2,1 1,2,3,4,5,6,7,8,9 は 1,2,3,4,5,4,3,2,1 になったりするんですか? 1,2,3,4,5 のパターンのみだったら A1:A5000にあるとして、B4から始めて =IF(AND(A3=4,B3=2),1,IF(A1&A2&A3&A4&A5="12345",2,A4)) で良いような気もしますが、ひょっとして 1,2,3,4,5,2,3,4,5 は 1,2,3,2,1,2,3,2,1 のように前方置換後の数値も置換条件になったりします? その場合はB1に=A1と入れてB3までコピー。B4から =IF(AND(A3=4,B3=2),1,IF(B1&A2&A3&A4&A5="12345",2,A4)) かな? もし >1,2,3,4,5,6,7,8,9 >は >1,2,3,4,5,4,3,2,1 だったらマクロのほうが面倒ないんじゃないかと思います。

noname#116092
質問者

お礼

説明不足でしたが、その通りです。 数字はかならず連続しており、 連続が途切れた場合に再び1から始まるという性質を持っています。 ですので、生データはこのような数値です。 例 12345123412312345671234567891234512312111234567891234

関連するQ&A

  • エクセルの置換について

    すぐ教えていただきたいんです! エクセルの文字列(この文字列は行ごとにいろんな文字列なんですがその前にある決まった文字列を付け加えたい場合はどのようにしたらいいでしょうか? たとえば置換だと、行に入力したその文字列1パターンしか置換してくれないんですよね? なんだかつたない説明ですいませんが、お分かりになる方教えてください!

  • Excelの置換

    すみません、Excelを教えてください。 ↓A1から文字列の項目が縦に並んでいます。先頭の数字(1: )を削除。文末の括弧付き数値をB列に移動したいと思っています。 1: ○○○○○○○○○(981) 2: △△(25) 3: □□□□□□(111) ↓ 2500: ★★★★(1000) 2501: ☆☆☆☆☆☆☆☆☆☆☆☆(299) 置換削除のやり方を教えてください。 ワードで置換削除をやってみましたが、次の行の内容まで削除されてしまい困っています。 文字列の部分的なセル移動はできるでしょうか? 部分的な移動ができない場合、括弧付きの数値で並べ替え等をする方法は無いでしょうか?

  • エクセルの「置換」で1行の部分を2行にはできますでしょうか?

    エクセルで「検索と置換」の置換で1行のものを2行に置き換えるということは可能でしょうか? 初心者でよくわからないのですがみたところ置換は 「検索する文字列」と「置換後の文字列」ともに1行しか対応していないように見受けたのですが。 意味合いとしては例えば abc という行があったとしてその行を efg hij というような2行に交換したいというような意味合いなのですが可能でしょうか?

  • EXCELで行ごとの置換を簡単に行う方法は?

    EXCELで式の一部を行ごとに置換する簡単な方法を探しています。 具体的には、以下の3行目、4行目で、A列のコードに合わせて、D列、E列の式の「2175」の部分をそれぞれ、3行目なら「2413」に、4行目なら「3415」に置換したいです。   A列   D列           E列  1  Code  名称           株価 2  2157  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 3  2413  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 4  3415  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 実際の行数は3000以上あるため、それぞれの行ごとに手作業で置換していくのは手間がかかりすぎるので、何か簡単に置換する方法をご教示いただきたいです。 どうか、よろしくお願いします。 当方、EXCELのバージョンは2013、Windows8.1です。

  • エクセルで複数行挿入

    エクセルで複数行(列)挿入するには、行や列をその数分ドラッグするより他ないのでしょうか?数値を入力するダイアログボックス等ありますか?

  • エクセルで複数ある同じ数値の行を1つだけにしたい

    初めて質問させて頂きます。 エクセルについての質問です。 バージョンは2002です。 複数ある行の中で、同じ数値がいくつかある場合、それを1行だけにする方法はありますでしょうか? 同じデータが複数ではなく1つだけにしたいのです。 ___A____B____C___ 1│330│220│520│ _________________ 2│330│ 80│890│ _________________ 3│330│ 72│ 69│ _________________ この様な場合、A列に同じ数値が入っている場合 1行のみ残したいのです。 何か良い方法ありましたら教えてください。

  • 複数行のテキスト置換

    エディタを用いて複数行にまたがるテキストの置換。 下記のようなテキストがあり あああああああああああああああ いいいいい■■■■■いいいいい ううううう■■■■■ううううう えええええ■■■■■えええええ おおおおおおおおおおおおおおお      ■■■■■      ■■■■■      ■■■■■ の部分を      ●●●●●      ●●●●●      ●●●●● に置換したいです。 ただ■を●にしたいのではなく、 ■15文字を検索して ●15文字に置換したいです。 正規表現を考えたんですが思いつきませんでした。 あああああああああああああああ いいいいい■■■■■いいいいい うううう■■■■■うううううう ええええええ■■■■■ええええ おおおおおおおおおおおおおおお このような感じもヒットしそうで・・・ 列も見て検索するといいますか そのようなツール・ソフト・やり方等ございましたら ご教授よろしくお願い致します。

  • エクセル(マクロ)置換2 置換用リストを1行ずつ読み込むには

    おはようございます。 エクセルは使いなれてますがVBAは記録を使っていて 書き換える程度なので調べてもあまり理解できず困ってます。 先程質問して、結合セルの置換に関しては解決したのですが、 もし簡単にできるのであればと質問させて頂きました。 今置換用のシートは A列に置換前の文字 B列に置換後の文字が入ってます。 そして対象のシートが置換されるようになってるのですが、 これが列ではなく 1行目に置換前の文字 2行目に置換後の文字として処理するのには どこを書き換えればよろしいのでしょうか? 色々試しましたがうまくいきませんでした。 実は、1行目に(A1セルに学生名(1)・A2のセルに住所(1))など20個くらい項目があります 2行目以降に5000行程、学生のデータが入ってます。 各会社の履歴書フォーマットは違うのですが、 入力欄が学生名(1)や住所(1)など入っている項目が同じなので 置換しております。 今は、1行ずつ下のデータを置換シートに貼り付けて 履歴書のシートで置換えをして 新しいファイルにコピーし保存して次のデータという アナログな処理をしております。 同じフォーマット(履歴書)でしたらvlookupなどが使えたのですが。。。 フォーマットによって1つのセルに、学生名(1)と住所(1)が両方入っていたりするので諦めました。 対象セルの場所も形も違いますしね・・・ 列で処理していたマクロを参考に下に貼り付けました。 明日の昼までにあと4000行を処理しなければならなくて困ってます。 お手数ですがどうぞよろしくお願いいたします。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row ActiveSheet.Range("A1:Z200").Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub

  • Excelのことですっごく困ってます!!!!

    エクセルでオートフィル機能を使うと連続データの入力や文字列などをコピーしたり出来ますよね!! そこで質問なんですが、数百の数値が入力されていて指定したセルに数式を入力してオートフィル機能を実行すれば簡単に全部にその数式が適用されるとは思うのですが、数百の数値の中に文字列が入力されている場合「0」か「エラー」が入力されてしまうと思うのですが、文字列だけを飛ばして数値入力されている行だけに数式を適用されるようにすることは出来ないのでしょうか???? データが限りない数あります。文字列の行に入力されてしまう「0」や「エラー」を消すだけでもかなりの数になってしまうのです。期限のあるものなのですごく困ってます!! エクセルの詳しい方大至急助けてください!!!!!!!!!!

  • エクセルにて「間違った数値→正しい数値」を一気に置換したい

     あるエクセルデータの数値を一気に置換したいのですが、そのようなことはエクセルで可能なのでしょうか? ファイルデータが二つありまして、 ・間違った数値が載っているデータ ・間違った数値と正しい数値が順番に載っているデータ の二つがあります。 前者のデータの数値を、正しい状態に変えたいのですが、あまりに数が膨大で困っています。 もう一つの方ですが、A列に現在の間違った数値、B列に正しい数値が入っております。各々の行を見れば「Before→After」が分かるというわけです。 一気に置換する方法が分かる方が居ましたら、是非教えて下さい。宜しく御願いします。

専門家に質問してみよう