• ベストアンサー

セル内の文字列の分割はsearch関数やleft関数を使わずにできないのでしょうか?

エクセルのA列に桁数が不規則な任意の数字が並んでいて、それぞれの数字には単位を表す"g"か"g/k"がついています。 B列にA列の数字を移し変えたいのですが、その際に、"g"がついているものはそのまま、"g/k"がついているものには70を掛けた後に"g"をくっつけて表記したいです。そこでB1セルに下記のような関数を使いました。 =IF(RIGHT(A1,1)="g",A1,LEFT(A1,SEARCH("g",A1,1)-1)*70&"g") のですが、すごくダラダラしてて長いように感じます。もっと簡単に同様の操作をできないのでしょうか?例えば、文字列と文字列をくっつけるのに&を使うだけですんでしまうように、-を使ったら文字が引き離せるとか、そんな便利な機能はないでしょうか? 過去の質問を検索したところ、search関数とleft関数を用いた回答が一件ヒットしただけで他に見当たらなかったので質問しました。よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

=IF(RIGHT(A1,1)="g",A1,SUBSTITUTE(A1,"g/k","")*70&"g") 式の長さはあんまり変わりませんが、 文字列を引くというイメージに近いのはSUBSTITUTE ですかね。

kamakurabakufu
質問者

お礼

なるほどー。こんな関数があったんですね。 僕の考えたものよりも使用する関数が一つ少ないだけすっきりしてますね。それに、search関数とleft関数の組み合せよりもBLUEPIXYさんに教えていただいたsubstitute関数の方が、なんていうか、個人的には感覚的に馴染みやすいです。 勉強になりました。ありがとうございます。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 ユーザー定義関数なら、Evaluate じゃないですね。 (以下は、本格的なものではありません。簡易型の関数です) 標準モジュールに貼り付けたら、 Function KEISAN(r As Range) As Variant Dim buf As Variant  If r.Value Like "#*g/k" Then   buf = CStr(Val(r.Value) * 70) & "g"  ElseIf r.Value Like "#*g" Then   buf = CStr(Val(r.Value)) & "g"  Else   buf = r.Value  End If   KEISAN = buf End Function 後は、VB Editor を、Alt + Q などで閉じて、 一般の関数と同じように使えます。 =KEISAN(A1) とすれば、出てきます。 A1 が、12345g/k なら、864150g となります。 なお、一般関数も考えてみました。 どのみち、どうやろうとも、この程度だと思います。 =IF(RIGHT(A1,1)="k",REPLACE(A1,LEN(A1)-2,3,"")*70 &"g",A1) その理由は、 『Excelの使い方のメモリ節約の方法』の原則(MS文書番号 : 401704) 5番目に、 表示形式の活用 『"10 個" というように数値に文字列をつけて表示したいときは、数値を表示している隣のセルに "個" と文字列を入力するのではなく、ユーザー定義の表示形式を作成する。』 というのがあります。つまり、その原則を外れた使い方は、Excelのワークシートでは画期的なものが用意されていないからなのですね。

kamakurabakufu
質問者

お礼

やってみたら、うまくいきました。自分で関数を作ってるんですよね。いやーすごい。感動しました。今回はWendy02さんに作ってもらったものを意味もわからず貼り付けたのですが、いずれ、自分で作れるようになりたいものです。 大変勉強になりました。ありがとうございました。

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

>70を掛けた後に"g"をくっつけて表記したいです で長くなるのはやむをえないでしょう。 ーー 例データ A列   B列 1234g 1234g 1g/k 70g/k 8231234g 8231234g 20g/k 1400g/k B列B1の式 =IF(RIGHT(A1)="k",LEFT(A1,SEARCH("g*",A1)-1)*70&"g/k",A1) で式をした方向告に複写します 結果 常時B列の通り。 質問とほぼ同じですね。 これより短い回答は関数式で、多分望めないでしょう。

kamakurabakufu
質問者

お礼

ありがとうございます。エクセル初心者で、今までエクセルのすごい機能にただ驚いてばかりだったもので、今回も実はすごい裏技があるのでは・・・・とエクセル君に大きな期待を抱いていたのですが・・・ でも、逆に言えば自分のやり方が効率いいことの証明になったわけで、自信につながりました。ありがとうございました。

noname#16474
noname#16474
回答No.1

ユーザー定義関数を作ってはいかがでしょうか http://www.eurus.dti.ne.jp/~yoneyama/Excel/ex-q-a/q_keisan/index.html#susiki-keisan

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/ex-q-a/q_keisan/index.html#susiki-keisan
kamakurabakufu
質問者

お礼

ありがとうございました。参考URLは他にもエクセルに関する情報がたくさんで、大変勉強になります。ただ、僕はマクロをほとんど使ったことがないためによくわかりません。 標準モジュールを開いて下記の式(?なんて表現するんでしょうかw?)をコピペしました。そこからどうすればいいのでしょうか? 「A列には文字列として数式が入力してあります。」というのは、データとして数値が入力されていれば、あとは僕は何もしなくていいのでしょうか。 「B1セルに定義した関数「keisan」を使って、『=keisan(A1)』と入力すると計算されます。」 多分、ここが一番重要だと思うのですが、よくわかりません。基本的な質問で恐縮なのですが教えていただけないでしょうか? >Alt+F11でVBEを開き、標準モジュールに >Function KEISAN(R As Range) >  KEISAN = Evaluate(R.Value) >End Function >と入力します。 >A列には文字列として数式が入力してあります。 >B1セルに定義した関数「keisan」を使って、>『=keisan(A1)』と入力すると計算されます。

関連するQ&A

  • エクセルのセル内数字の分割転記

    またしてもド素人の質問で恐縮ですが、 ある列に桁数の異なる数値が縦に並んで記載されているとき、 セルと同一列の別のセルに、数値を一文字ずつ分割して、下記の様に表示させたいのです。 (G列の数字はすべて右揃えのつもりです)   A B C D E F G 1  5 4 3 2 1   54321 2      1 2 3    123 3        2 2     22 4      6 5 2    652 5          9     9 そこで、A1には、=LEFT(RIGHT($G1,5))、B1には=LEFT(RIGHT($G1,4))、というように、関数を入れておき、1列目はA1からE1まで無事表示できました。 しかし、2列目以降にA1からE1の各セルの式を転記しますと、 1  5 4 3 2 1    54321 2  1 1 1 2 3     123 3  2 2 2 2 2      22 4  6 6 6 5 2     652 5  9 9 9 9 9       9 と、なってしまいました。空白にしたいところに指定セルのトップの数字が入ってしまうんです。指定したセルの数字の桁数よりも大きな部分は空白にしたいのですが、 「もしも何かの条件に合わねば空欄に」というようなことができれば幸いなんですが、どのようにすればいいのかをお教えください。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • エクセルの文字列・数値【長文です】

    昨日、LEFT関数の使い方を教えていただきましたが、これですとLEFT関数を用いたところが【文字列】として認識されました。【数値】として認識させる方法を教えてください。 初心者で申し訳ございません。 昨日の質問・いただいた回答は以下の通りでした。 ≪質問≫ [123456/あいうえお/abc][234567/かきくけこ/efg]のようなデータがいくつかあって(例えばA列に)、B列に[123456][234567]、C列に[あいうえお][かきくけこ]、D列に[abc][efg]と表記できるような【関数】を教えてください。 ≪いただいた回答≫ A1にデータがあったとして。 B列 =LEFT(A1,SEARCH("/",A1,1)-1) C列 =LEFT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),1)-1) D列 =RIGHT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)))-SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1))))

  • EXCEL文字列操作

    いつもお世話になっています。 EXCELの文字列操作に関してですが、右から任意の文字を表示させないことは可能でしょうか? 右から2文字を表示させない場合 1000 → 10 100  → 1 2001 → 20 5556 → 55 桁数が同じならLEFT関数で対応できるのですが、桁数が違うので上手くいきません。 ご教授願います。

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • Left関数とRight関数を合わせたような

    こんにちは いつもお世話になっています。 A列に文字列があります。 文字の長さは不定ですが、左から3文字、右から4文字は共通して不要なので削除したいです。right,leftの両関数を合わせたような関数を教えてください。 二列で分けて処理するのではなく一回の関数で処理希望です。 =LEFT(A2,LEN(A2)-4)&RIGHT(A2,LEN(A2)-3) こんなので失敗しています。 よろしくお願いします エクセル2007

  • 文字列操作

    VB6の質問です。 下記のような桁数不定の取得データがございます。 桁数不定の為、Mid, Left, Right関数が使用できません。 Buffer = "A12345...B678910...C" 区切り文字A、B、Cを除いてデータを取り出したのですが、どのような方法がございますか? Data1 ="12345..." Data2 ="678910..."

  • 複数セルから文字列を検索して・・・

    どう検索していいのかわからなかったので質問します。 複数のセルから特定の文字列を検索して、該当したセルに対応するB列の数字の合計を関数によって出したいです。 例えば画像を例にすると、A列で"()"という文字列が入っているセルがいくつかあります。 これらのセルに対応するB列の数字の合計を出したいです。 "()"は必ず文字列の末尾にくることとします。 回答よろしくお願いします。

  • エクセルにて セルの文字列を逆向きにするには?

    A1に「qwer」とある場合、B1には「rewq」と文字を逆にしたいのですが、エクセルの関数のみで可能でしょうか? A1の文字列の長さは任意とします。 関数では困難な場合はマクロでも良いのですが、簡単に出来るようでしたらお教え下さい。

  • 文字列に数字を含むセルを調べたい

    Excel2007を使っています。 A列の文字列に数字を含む場合、B列に「含む」と表示させたいです。 どういった関数でできるのでしょうか? A列    B列 ABC1   含む DEFG 23HIJK  含む I4M5N   含む OPQ RSTUV W6X    含む 7YZ8    含む

専門家に質問してみよう