• ベストアンサー

エクセル関数

こんにちは、エクセルでこんなこと出来ますか?教えてください。  例 acbadcbba 935841621 セルにa~dの文字を入力し、それに対する値を入力していきます。  順次入力していきますが、常にa~dの値を別なセルに表示させたいのですが、可能でしょうか?  上記の例では、aは1 bは2 cは1 dは4 です。 可能でしたら、方法を教えてください。よろしくお願いします。

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

  • ベストアンサー
  • inte-nori
  • ベストアンサー率48% (33/68)
回答No.10

#2です。例によって関数ではなくVBAですが、縦に入力する場合の方法を書いておきます。 #2のコードのOffset(-1)のところを、Offset(,-1)に変更するだけです。 一応、今回のコードの説明を書いておきますね。ご参考までに。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) →開いているブックの中にあるシートが変更されたとき、下記のコードを実行する  (同時に、変更されたセルをTargetという引数に格納する)   On Error GoTo er   →エラーが発生したときはer:にジャンプして、何もせずに終了させる   If Target.Offset(,-1).Value = "a" Then Range("f10") = Target.Value   →もしTargetの左のセルが"a"だったら、F10セルにTargetの値を入れる(以下4行同じ) er: →エラー発生時のジャンプ先(左端のセルを変更した時、上の行がエラーとなってしまうため) End Sub →コード終了の宣言

hiromi-chann
質問者

お礼

 詳しい説明ありがとう御座います。  やっと内容を理解する事が出来ました。  関数での方法が分からないのは残念でしたが、私の作りたいシートは出来上がりそうです。  本当にありがとう御座いました。

その他の回答 (9)

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.9

#8です。 すみません。下の式は、B列の行数がA列の行数より少ないと、正確な答えを返しませんでした。なかなか難しいですね。

hiromi-chann
質問者

お礼

 いろいろ考えてくれてありがとう御座います。  本当に難しいですよね!ちょっとしたものを作ろうと考えて始めたものなのに、なかなか進まなくって.....

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.8

#7です。 A列にアルファベット、B列に数字。 D1にa、D2にb、D3にc、D4にdとして、 E1に以下を入れ、数式バーにカーソルがあるうちに、ShiftキーとCtrlキーを同時に押しながらEnterキーを押下、下へオートフィルでいかがでしょう。 =IF(ISERROR(MATCH($D1,A:A,0)),"",INDEX($B:$B,MAX(IF($A$1:$A$10000=$D1,ROW($A$1:$A$10000),""),1)))

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.7

#5です。 前回の式では入力する値の桁数が少ないと、不正確な結果を出してしまいました。修正案です、より複雑になってしまいました。もっと簡潔に出来そうな気もするのですが・・・。 数式バーにカーソルがあるうちに、ShiftキーとCtrlキーを同時に押しながらEnterキーを押してください。 =IF(ISERR(FIND(A4,RIGHT($A$1,LEN($A$2)),1)),"",LEFT(RIGHT($A$2,SMALL(IF(LEFT(RIGHT($A$1,ROW($A:$A)),1)=A4,ROW($A:$A)),1)),1))

  • inte-nori
  • ベストアンサー率48% (33/68)
回答No.6

#2で答えた者ですが、 また、#2では「1行目にa~d、2行目に値」と書きましたが、数値を入力した時に すぐ上のセルの文字を判定するようになっているので、「a~d」と「値」の間に 空欄がなければ、1、2行目以外でも大丈夫です。

hiromi-chann
質問者

お礼

 実際は縦に使用するつもりなので、皆さんの回答を理解出来るように頭フル回転中です(あまり回りません)。  ところで、関数では無理なのでしょうか?  

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.5

関数でやってみました。   A 1 acbadcbba 2 935841621   3 4 a 5 b 6 c 7 d として、任意のセルに下をコピーし、まだ数式バーにカーソルがあるうちにShiftキーとCtrlキーを同時に押しながらEnterキーを押します。数式の両脇に{}が付きます。その後オートフィルで下へコピー。 =LEFT(RIGHT($A$2,SMALL(IF(LEFT(RIGHT($A$1,ROW($A$1:$A$20)),1)=A4,ROW($A$1:$A$20)),1)),1)

  • comv
  • ベストアンサー率52% (322/612)
回答No.4

#1 comv です 大きな勘違いをしていたようですねスミマセン 以下のようなことでしょうか?    A   B C D E 1 acbadcbba 2 935841621 3 4       a  b  c  d 5 1      式 → → → 6 2     ↓ 7 3 8 4 9 5 10 6 11 7 12 8 13 9 A1に記号入力 a~d A2に対する値を入力 A5:A13に1~9を記載 B4:E4に a~dを記載 B5に式  =TEXT(MAX(IF(LEN($A$1)>=ROW($A$1:$A$30),IF((MID($A$1,ROW($A$1:$A$30),1)=B$4)*(MID($A$2,ROW($A$1:$A$50),1)*1=$A5),$A5))),"#") と入力後 [Ctrl]+[Shift]を押したまま[Enter]で確定 B5:E13の範囲に複写

hiromi-chann
質問者

お礼

 何度もありがとう御座います。

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

A-iと言う範囲(9番目)までなら、小文字英字として Private Sub Worksheet_Change(ByVal Target As Range) s = "" For i = 1 To Len(Target) s = s & Trim(Str(Asc(Mid(Target, i, 1)) - 96)) Next i MsgBox s End Sub で良いでしょう。 sを好きなセルにセットすること。 何に使うか想像できないが。

  • inte-nori
  • ベストアンサー率48% (33/68)
回答No.2

VBAで作ってみたんですが、これでいいでしょうか? 1行目のセルにa~dを、その下の2行目にそれに対応する値を入力するとします。 1.「ツール」>「マクロ」>「Visual Basic Editor」を開きます。 2.左上のほうの「ThisWorkbook」というところで右クリックをして、「コードの表示」を選択します。 3.右側の大きな画面に下記のコードを入力します。(コピー&ペーストでいいはず。) Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)   On Error GoTo er   If Target.Offset(-1).Value = "a" Then Range("f10") = Target.Value   If Target.Offset(-1).Value = "b" Then Range("g10") = Target.Value   If Target.Offset(-1).Value = "c" Then Range("h10") = Target.Value   If Target.Offset(-1).Value = "d" Then Range("i10") = Target.Value er: End Sub 4.下のタスクバーのボタンでエクセルの画面を表示してください。 これで、F10~I10のセルにそれぞれa~dの下に入力した値が表示されると思います。 上記のコードのRange("○○")の部分を修正することにより、別のセルに表示させることが可能です。

hiromi-chann
質問者

お礼

 VBAの存在も知らなかったのですが、一応希望道りになりました。ただ、どう使えばよいのか良く分かりませんので、もっと勉強してみます。  ありがとう御座います。

  • comv
  • ベストアンサー率52% (322/612)
回答No.1

こんばんは >上記の例では、aは1 bは2 cは1 dは4 です。 で acbadcbba が 935841621 になる規則性が わからないのですが 単純に a=1 b=2 C=1 d=4 なら A1にa~dを入力 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"a",1),"b",2),"c",1),"d",4) 結果は  acbadcbba なら 112141221 となります

関連するQ&A