dポイントプレゼントキャンペーン実施中!

こんにちは、エクセルでこんなこと出来ますか?教えてください。
 例
acbadcbba
935841621

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

A 回答 (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
→コード終了の宣言
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/11/08 23:05

#8です。



すみません。下の式は、B列の行数がA列の行数より少ないと、正確な答えを返しませんでした。なかなか難しいですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/11/08 22:56

#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)))
    • good
    • 0

#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))
    • good
    • 0

#2で答えた者ですが、



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

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

お礼日時:2003/11/07 03:04

関数でやってみました。


  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)
    • good
    • 0
この回答へのお礼

 

お礼日時:2003/11/07 03:15

#1 comv です


大きな勘違いをしていたようですねスミマセン
以下のようなことでしょうか?

   A   B C D E
1 acbadcbba
2 935841621

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の範囲に複写
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/11/07 03:19

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を好きなセルにセットすること。
何に使うか想像できないが。
    • good
    • 0

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("○○")の部分を修正することにより、別のセルに表示させることが可能です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/11/07 02:52

こんばんは



>上記の例では、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 となります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!