• ベストアンサー

()内のだけ違うセルに

考えましたが思いつかないので知恵を貸してください。 Sheet1に A列 B列 AAA 10 ABA(X) 20 BBAA 19 AA(XY) 12 BBBA 1.1 BBAA 22 AA(XY) 2.3 BBBA 21 ※ランダム ※ランダムな文字列   このように入力されています これを C列 D列 AAA 10 ABA 20X BBAA 19 AA 12XY BBBA 1.1 BBAA 22 AA 2.3XY BBBA 21 のようにさせたいのです つまりは、()を外して違うセルの後ろに()内の文字を貼り付ける という作業です。 よろしくおねがいします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

こんな感じでしょう A:B から D:Eへ転記しています シートモジュールにマクロを記載 Sub Macro1()   Dim r1 As Range, r2 As Range   Dim ss As String, n As Integer   Set r1 = Range("A1")   Set r2 = Range("D1")   Do While r1.Value <> ""     ss = r1.Value     n = InStr(ss, "(")     ' (があるかチェック     If n > 0 Then       ' あった場合はその手前までの文字列にする       ss = Left(ss, n - 1)     End If     r2.Value = ss     Set r1 = r1.Offset(1)     Set r2 = r2.Offset(1)   Loop   Set r1 = Range("B1")   Set r2 = Range("E1")   Do While r1.Value <> ""     ss = r1.Offset(0, -1).Value     ' 左のセルに( があるかチェック     n = InStr(ss, "(")     If n > 0 Then       ' ( があるならそれ以降を取得       ss = Mid(ss, n)       ' ( ) を削除       ss = Replace(ss, "(", "")       ss = Replace(ss, ")", "")     Else       ss = ""     End If     ' 文字列を連結して設定     r2.Value = r1.Value & ss     Set r1 = r1.Offset(1)     Set r2 = r2.Offset(1)   Loop End Sub

TIMSYD
質問者

お礼

完璧です!ありがとうございました。 このマクロで作成されたセルの組み合わせと同じ組み合わせを Sheet2から探し、同じ行の指定のセルの文字を抜き出すというはできますか? 質問ばっかりですいません↓

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#4です。別解を1つ。 Sub test03() On Error GoTo nxt d = Range("a6556").End(xlUp).Row For i = 1 To d On Error Resume Next x = Application.WorksheetFunction.Search("(*)", Cells(i, "A").Value) If Err <> 0 Then ' String Not found Cells(i, "D").Value = Cells(i, "B") Else y = Application.WorksheetFunction.Search(")", Cells(i, "A").Value) Cells(i, "D").Value = Cells(i, "B") & Mid(Cells(i, "A"), x + 1, y - x) End If On Error GoTo 0 nxt: Next i End Sub (と)を両方捉えているので、少しきめ細かいかなと思います。

TIMSYD
質問者

お礼

お礼が遅くなってすいません ありがとうございました。無事出来ました↑

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

Sub test02() d = Range("a6556").End(xlUp).Row For i = 1 To d t = Split(Cells(i, "A"), "(") If UBound(t) > 0 Then s = Left(t(1), Len(t(1)) - 1) Cells(i, "C") = Cells(i, "B") & s Else Cells(i, "C") = Cells(i, "B") End If Next i End Sub

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.3

質問を多少簡略化していますので、そこは応用を!

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

AAA 10__________AAA 10 ABA(X) 20_______ABA 20X BBAA 19_________BBAA 19 AA(XY) 12_______AA 12XY BBBA 1.1________BBBA 1.1 BBAA 22_________BBAA 22 AA(XY) 2.3______AA 2.3XY BBBA 21_________BBBA 21 A1~A8をB1からB8に転写した結果です。 この場合の式は、 =CutStr(A1, "(",1) & CutStr(A1, ")", 2) & CutStr(CutStr(A1, "(",2), ")",1) これをズズーッでOKです。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function まあ、CutStr関数一つでも可能です。

TIMSYD
質問者

お礼

関数ひとつでも可能なんですね・・。 LEFTとLENでごちゃごちゃやったんですが(笑) ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの名前の定義について。

    ご覧いただきありがとうございます。 エクセルの名前の定義についての質問です。 (1)【sheet1】 A2:A6に『aa』、 B2:B10に『bb』、 C2:C6に『cc』という名前を付けたとします。 ちなみにそれぞれのセルには文字列が入力されています。 (名前の定義の《範囲》はブックではなく、sheet1) (2)【sheet2】 B2:D6に『aa』、 B7:D15に『bb』、 B16:D20に『cc』と、sheet1と同じ名前を付けました。 それぞれB列・C列・D列には数字が入力されています。 (名前の定義の《範囲》はブックではなく、sheet2) ちなみにA列には、sheet1に入力されている文字列と同じものが入力されています。 A2:A6にはsheet1で『aa』と名前をつけた範囲と同じ文字列。 A7:A15にはsheet1の『bb』と同じ文字列。 A16:A20には『cc』と同じ文字列です。 ここからが本題です! (3)【sheet3】 A2に何らかしら関数を入れて、【sheet1】で作った名前(aaやbbやcc)が1つ表示されるようにしたとします。 そしてB2には、A2で表示された名前の中の文字列が1つ表示されるようにします。 (例えばA2に『aa』と表示されたら、B2には◯◯) 更にC2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』の中のB列と、A列にある◯◯とが交差するセルに入力されている数字(図でいう(5))を表示させる関数を入力したいのです。(INDEXやINDIRECT、MATCH関数など…) 他に例えば、A2に『bb』(sheet1の名前)、B2に★★と表示されたら、C2には【sheet2】の名前『bb』の中のB列と、A列にある★★が交差するセルに入力されている数字を表示させたいです。 同じように、今度は、D2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』のC列と、A列にある◯◯の交差するセルに入力されている数字を表示させたいです。 長々とややこしくてすみません… 説明分かりますでしょうか?? つまりは【sheet3】のC2・D2・E2に入力する関数が知りたいです。 自分なりに関数を入力してみたのですが、A2で表示された名前がsheet1での名前なので、sheet2の情報を引き出す事が出来ません。 わざわざsheet1とsheet2でシートを分けたのは、同じシート内で同じ名前が付けられないと思ったからです! どなたか分かりましたら教えて下さい! どうぞよろしくお願い致します。 ※ちなみに、貼付した図の『・』は以下省略の意味で使ってます。

  • セルの値に応じて数式を入力するシートを変えたい

    シート名が 「aaa」 「bbb」 「ccc」 「ddd」 という4つのシートがあります。 シート「aaa」のD4セルに入力した値(シート名)に応じて、 (上記で設定したシート)のF7セルに "=SUM(F5:F6)"という数式を入力したいのですが、 おわかりの方がいらっしゃいましたらご教授いただければ幸いです。 例) シート「aaa」のD4セルに「ccc」と入力して実行すると、 シート「ccc」のF7セルに「=SUM(F5:F6)」の数式を入力するマクロを作成したい。 (シート「aaa」のD4セルに「ddd」と入力して実行すると、 同様に、シート「ddd」のF7セルに数式をマクロで入力したい)

  • セルに入力したら、別の特定セルに文字表示させるには

    似たようなQ&Aはあったのですが、求めているものとは少し違うので質問させていただきます。 エクセルで、指定したセルに数値を入力したら、 別シートの特定セルに特定文字列を表示させる ということはできませんか。 例えば、sheet1のセルB3に「2」と入力したら sheet2のセルB5に「●」と表示 次に、sheet1のセルB4に「6」と入力したら sheet2のセルD11に「●」と表示 次に、sheet1のセルC3に「4」と入力したら sheet2のB9に「○」と表示           のようなかたちです。 sheet1の入力範囲は、B3:I85程度 sheet2の入力範囲は、B3:FZ170程度で、特定セルは重複しない 表示されるのは、「●」「○」などの文字列 です。 途中経過として、MATCH関数、ADDRESS関数を利用して sheet1のセルに数値入力をしたら sheet2の入力すべきセル番地を求めることまではできたのですが その求めたセルがすべて異なるので、それぞれのセルに移動させて 文字列を表示させることができずに困っています。 解決法をご存知の方、どうぞよろしくお願いいたします。

  • エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数は?

    エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数はありますか? たとえばA列の値に存在する文字がB列に1文字でもあるかを チェックすることができるのでしょうか。 A列    |   B列    |   C列 -------+----------+---------- ABCD  |  XYZB   |  ○ --> Bがある XY    |  ABSCE  |  X --> XもYもない HD     |  XUDM  |  ○ --> Dがある マクロ(VBA)でなく関数で表したいのですが このような関数はありますか? 関数のヘルプを調べたのですが、出来そうで出来ません。 どうぞよろしくお願いします。

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • シート名をセルから取得したい

    作業用シートのA列に Sheet1 Sheet2 Sheet3 と、入れ B列は、そのシートのA列の個数を 作業用シートに入力していきたいのですが、 作業用シートのb1に =COUNTA(Sheet1!A:A) と入力した場合、正しい個数が返りますが シート名をA列の文字列にしたくて、 ="COUNTA("&A1&"!A:A)" こんな感じにしたいのですが、 こうすると、これが文字列になってしまいます。 =COUNTA("&A1&"!A:A) これだと、数式が間違ってますというエラーになります。 数式内でセルを参照してシート名を指定する方法を教えてください。

  • Excelにて、カタカナだけのセルを抜き出す方法は?

    Excelファイルにおいて、複数のワークシートにランダムに文字列が入力されている状態です。 ランダムといっても入力されている範囲はある程度限られていますが、定型ではありません。 このような状態から、カタカナのみの文字列が入力されているセルの文字列を抽出し、新たなワークシートに出力する方法はありますでしょうか? 抽出した文字は、新しいワークシートに1列に並べたいのです。 良い方法がありましたらお教え下さい。 よろしくお願いいたします。

  • VBA セル位置の確認

    はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 Dim AAA Dim name Dim x dim y AAA=split(文字列,",") ここで作成されたAAA(0)はシート名を表しています。 name = "田中" AAA(0)というシートにあるname"田中"が 記入されているセルの位置(x,y)を 確認するにはどのようなコーディングを行えばよいのでしょうか。 大変恐縮ですがコーディング等を明記して頂けると助かります。 よろしくお願い致します。

  • excelでシートの存在を確認するには...

    Sheet1のB2から下のセルにaaa1,aa2,aa3...と入力されていたとします。 そのセルの文字列の名前が同じエクセルのワークシート名として、存在するかどうかをC2から下に「OK」、「NG」と記載できるようなマクロを検討しています。 わかる方いらっしゃいますか?

  • エクセルでセルの先頭4文字から特定の値を表示

    宜しくお願いします。 タイトルのとおりですが、例を書きます。 A列に「1234-XXXXXX」と「5678-XXXXXX」(Xはランダムな数字)と空白セルが並んでいるとき、 D列に先頭の4文字が ・「1234」の場合「山」 ・「5678」の場合「川」 ・空白かその他の値の場合セル背景色を赤 ・空白セルに「1234-XXXXXX」や「5678-XXXXXX」を入力したら、背景色をなくし「山」「川」それぞれの値 と表示したいと考えています。 毎日シートをコピーして値はクリアし、さらにデータは その他のシートから行コピーし値貼り付けするので、 関数などの数式等だと消えてしまい、その都度式を コピー&ペーストしなければならないので、 できればセルに式入力する以外(マクロ?入力規則?) の方法ご教授いただけると助かります。 長く分かりづらいところがありましたら申し訳ございません。 宜しくお願い致します。

印刷時に紙に皺がよってしまう
このQ&Aのポイント
  • 印刷時に紙にしわがよることがあります。
  • 特にブラザー製品の場合、印刷時に紙が皺になることがよくあります。
  • 皺の原因は、プリンターの動作や用紙の取り扱い方にあります。
回答を見る