- ベストアンサー
EXCELの技に関する質問
EXCELに詳しい方がいらっしゃいましたら、すみませんがお教えください。 EXCELであるシートに以下のように一定ではない並びで「名前(年齢)」と複数のセルに入力してあったとします。 【BEFORE】 ヤマダ ハナコ(25) ヤマダ タロウ(52) スズキ ジロウ(13) この時、この年齢に1歳加え、以下のような状態にしたいと思っています。 【AFTER】 ヤマダ ハナコ(26) ヤマダ タロウ(53) スズキ ジロウ(14) そこで、上記のように3つくらいであれば普通に年齢を手補正すればいいのですが、数が大量にある時に、何か簡単にプラス1歳をしていく方法はありませんでしょうか? ややこしいことに、いろんな年齢の人がいるので置換を使っても手間がかかりますし、名前と年齢がひとつのセルに文字列として入っているうえ、列などが一定ではないので「=A2+1」といった簡単な数式を使うわけにもいきません。 (これは何かというと人名年齢入りの会社の組織図みたいなものなのです) どなた何か良いアイディアがありましたらどうぞよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
同一セルに加算はVBAでないと難しいので一例です。 ※実施は、原シートを別シートにコピーしてコピー先のシートで実施してください。 (1)コピー先シートのシートタブ上で右クリック→コードの表示 (2)以下のコードを貼り付け、「セル範囲」の部分を書き換え (3)VBEを終了(右上枠の×キーまたは、Alt+F4キー押下) (4)ツール→マクロ→マクロ表示→「歳加算」を選択→OK Sub 歳加算() セル範囲 = "A1:J10" セル数 = Range(セル範囲).Cells.Count For i = 1 To セル数 x = InStr(1, Range(セル範囲).Cells(i), "(", vbTextCompare) y = InStr(1, Range(セル範囲).Cells(i), ")", vbTextCompare) If x > 0 Then 歳 = Mid(Range(セル範囲).Cells(i), x + 1, y - x - 1) + 1 Range(セル範囲).Cells(i) = Left(Range(セル範囲).Cells(i), x) & 歳 & ")" End If Next End Sub
その他の回答 (1)
- CMLT
- ベストアンサー率40% (143/357)
カッコ内の数字を抜き出して1加えること自体は難しくはありませんが、同じセルに置換して戻すんですよね。 後々を考えたらセルを分けて作り直した方がいいかも知れません。 関数でやるなら別シートに+1した組織図を丸々作ってしまって、全コピー、値のみ元のシートに貼り付ける方法など。 あとは考え方で、置換の繰り返しで、 9) → *) 、 8) → 9) 、 7) → 8) 、 6) → 7) 、 5) → 6) 、 4) → 5) 、 3) → 4) 、 2) → 3) 、 1) → 2) 、 0) → 1) の様に置換して、後は*を検索していくなどでしょうか?
お礼
素晴らしいです!できました!本当にありがとうございます!