人に聞けない痔の悩み、これでスッキリ >>

タイトルが長くてすみませんm(_ _)m
エクセル(97)に関しての質問です。

例えば、セルの中に最初から「15-G」という文字列を
表示させておいて、(ダブルクリックして編集という
形じゃなくて)そのセルを選択しただけで、
その文字列の後から3桁の数字を入力できるように
したいのですがいい方法はないでしょうか?

他にやってみた方法で、ユーザー定義(私が考えた定義→「"15-G"@」)でセルに3桁の数字(例えば567)を入力しますと、「15-G567」というように表示させる事が出来たのですが、何も入力されてない時は当たり前ですが空白のままです。
出来れば、最初から「セルの中の始めに15-Gという文字列を」表示させておきたいのですが…

このQ&Aに関連する最新のQ&A

A 回答 (10件)

diashun です。


諦めずに挑戦するお気持ち、敬意を払います。
さて、エラー箇所を特定するためにデバッグモードでVBAを動かしてみましょう。
1.「Sheet1」のVBE編集画面を開いてください。
「Private Sub CommandButton1_Click()」の行とプロジェクトツリーの境界で右クリックしてください。
これでその境界部分に茶色の●が表示され、「Private Sub CommandButton1_Click()」の行も茶色の帯がつきましたか?
これは「ブレークポイント」といい、プログラムの実行を任意に中断する場合に指定します。
2.Excelの「Sheet1」に戻り、「CommandButton1」をクリックします。(この時、コントロールツールボックスのデザインモードを終了しておいてください)
3.VBEの[Sheet1」のブレークポイントのところで黄色い帯が表示されてプログラムの実行が中断されていますか?
ここまで「OK」でしょうか?
4.次の行からプログラムの実行を継続させます。
「F8」キーを一回押してください。
黄色い帯が次行(Set_String1)へ移動しましたか?
さらに「F8」キーを押すと「Module1」の「Set_String1」プロシージャVBE画面へ遷移するはずですが、ここまで「OK」ですか?
5.「F8」キーを一回ずつ押して一行ずつ実行してください。
エラー箇所があれば何らかのエラーダイアログとメッセージが表示されるはずです。その時「終了する」と「デバッグする」のボタンも表示されるので「デバッグする」のボタンを押すと、エラー行の場所が黄色い帯で表示されますので、その行内容とエラー表示メッセージの文言をお知らせ下さい。

>「Module1」の所が紺色に反転しています・・・は関係ないと思います。

ただ念のため「ThisWorbook」「Sheet1」「Module1」のVBEが下記の通り間違いないか、再確認もしておいてください。
●「ThisWorbook」のコード
Option Explicit

Private Sub Workbook_Open()
Dim strDefAry() As String
Dim i As Integer
ReDim strDefAry(0 To 9) As String '仮に10種類の文字列(ランダムな文字)を登録します。

strDefAry(0) = "15-G"
strDefAry(1) = "11-A"
strDefAry(2) = "15-V"
strDefAry(3) = "10-H"
strDefAry(4) = "11-R"
strDefAry(5) = "13-Y"
strDefAry(6) = "19-X"
strDefAry(7) = "00-D"
strDefAry(8) = "01-W"
strDefAry(9) = "15-K"

For i = 0 To 9
Sheet1.ListBox1.AddItem strDefAry(i)
Next i

Sheet1.ListBox1.Visible = True
ThisWorkbook.Sheets(1).Activate

End Sub

●「Sheet1」のコード
Option Explicit

Private Sub CommandButton1_Click()
Set_String1
End Sub

●「Module1」のコード
Option Explicit

Public Sub Set_String1()
Dim strCell As String, lngRowNum As Long, strDefStr As String
Dim i As Integer

strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力")
strDefStr = Sheets(1).ListBox1.Text
lngRowNum = ActiveCell.Row
Call Set_String2(strCell, strDefStr, lngRowNum)
End Sub

Public Sub Set_String2(strCell As String, strDefStr As String, lngRowNum As Long)
Dim i As Integer

Range(Cells(lngRowNum, strCell), Cells(lngRowNum, strCell)).Activate
Range(Cells(lngRowNum, strCell), Cells(lngRowNum, strCell)) = strDefStr
End Sub

あと、Excelの「Sheet1」に「CommandButton1」と「ListBox1」は貼り付けられていますね?
以上、またご連絡をお待ちします。
でも、お忙しいならいつでもいいですよ。
気長にお付き合いしますので、(^_^)
    • good
    • 0
この回答へのお礼

もう一度、diashunさんのアドバイスを熟読して、一つ重大な勘違いに気づきました!!!
一つ「モジュール」の部分が気になったので、VBEのメニューを色々覗いてみましたら、「挿入」のメニューに「標準モジュール」の項目があったので、それを選びましてそれで出てきたファイルに「●「Module1」のコード」をコピーしましたら完成致しました!(^0^)!
動作も問題ないです!
Sheet1に全てコピーしてましたので駄目だったみたいです・・・。素人すぎて情けないです(ーー;)
でも、やり遂げて本当によかったです!

この度は本当にご親切、そしてアドバイスありがとうございましたm(_ _)m

お礼日時:2004/05/18 11:53

またまた#4 diashunです。


補足拝見しました。
まず、以下のを確認します。
「Sheet1」に「CommandButton1」と「Listbox1」の貼り付けは出来ましたか?
「Private Sub CommandButton1_Click()」に黄色い網掛けがあるということはいわゆる「デバッグエラー」で、「CommandButton1」がまだ「Sheet1」に存在していない可能性を示しています。
「CommandButton1」の貼り付けは以下の手順で出来ます。
Excelのメニューバーの「表示」→「ツールバー」をポイントし、「コントロールツールボックス」をチェックします。コントロールツールボックスのいろんなアイコンの上にマウスを持ってゆくと「コマンドボタン」があり、それをクリックするとマウスアイコンが「+」の形になるので、「Sheet1」の適当な位置でクリック、ドラッグすると「コマンドボタン」(CommandButton1)が描画されます。同じように、「リストボックス」も貼り付けてください。
>>strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力")

↑これは、とりあえず私はA列に入力するということにしましたので
「strCell = InputBox("A", "A")」ということで、
両方とも「""」の中に「A」を入力しましたけどよかったでしょうか?>>
ここのところは「原文どおり- strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力") -
」とし変更しないで下さい。
つまり、このVBAコードで「インプットボックス」ダイアログを表示し、自動入力指定列(A、Bなど)を入力する部分です。
ここまできたらとことんお付き合いしますので、補足で不明な点をお知らせ下さい。
ただ、僅かのセル入力でしたらここまでする手間が必要なのかなと疑問にも思いますが、・・・
ま、VBAを学んでいただくには少しは参考になるかも・・・ということで宜しくお願い致します。
    • good
    • 0
この回答へのお礼

お付き合い頂きまして本当にありがとうございます!!!

もう一度挑戦してみました!
「CommandButton1」の貼り付けは、コントロールツールボックスから作り直しました。

>>strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力")

これも原文通り修正し直しました!

ですが、どうしても「コンパイルエラー 構文エラー」が出てしまいます。
あと、他に気づいた事は、「Module1」の所が紺色に反転しています。何か手がかりになりますでしょうか?


>ただ、僅かのセル入力でしたらここまでする手間が必要なのかなと疑問にも思いますが、・・・
ま、VBAを学んでいただくには少しは参考になるかも・・・ということで宜しくお願い致します。

結果はどうあれ、私もいい勉強にもなると思いましたので、ここは最後まで成し遂げたいと思います。

改めて、お礼申し上げますm(_ _)m

お礼日時:2004/05/18 09:37

#3です。


>リストボックスの中の15Bをクリック。
113と入れたセルが、15B113になる。の部分がよくわからなかったのです・
リストボックスを貼りつけて、ListFillRangeを入力し
たあと、デザインモードを脱しないといけません。
VBE画面の「実行」をクリックしたとき、出てくる鉛筆と定規のアイコンをクリックし、リストボックスを貼りつけたシートに戻り、目的のセルに113と入力し、リストボックスの15Bをクリックします。(改行後下セルへ移動にしておくこと。)
    • good
    • 0
この回答へのお礼

ご返信感謝いたします。

「デザインモード」のことは解決できました!

ですが、操作してるうちに「リストボックス」から
選択した「(例えば)15B」などが意図したセルに出なかったり、よく「アプリケーション定義またはオブジェクト定義のエラー」が出てきたりします。

今試してる家での環境がエクセル2002なのでそれも関係してるのですかね???

でも、色々な方法があるのを知り、とてもエクセルの奥の深さを知らされました!

本当に感謝です<(_ _)>

お礼日時:2004/05/17 22:19

またまた#4 diashunです。



ListBoxでなくこのケースは「ComboBox」でした。
でも、コード中、「ComboBox1」を「ListBox1」に置き換えれば同じことですが・・・

この回答への補足

ご親切にそしてご丁寧なアドバイス、ありがとうございます<(_ _)>
返事遅れましてすみませんでした。
ちょっと買い出ししてから家に帰ったので、
遅くなりました。
そして、家に返って再挑戦してみました!
一応手順通りやったつもりですが、

>次に、文字列を自動表示したい行をどれかクリックします。
さらにListBox1をクリックして「表示したい文字列」
をクリックし、「CommandButton1」をクリックすると…

というところで、なにやら「コンパイルエラー 
構文エラー」が出てしまいました。

そしてVBEのページが出てきまして、
最初の方にある「Private Sub CommandButton1_Click()」の文字列に黄色い網掛けがつき、
その文字列の左側に矢印がついてました!


とりあえず、私が気になってる箇所を書きます。

>strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力")

↑これは、とりあえず私はA列に入力するということにしましたので
「strCell = InputBox("A", "A")」ということで、
両方とも「""」の中に「A」を入力しましたけどよかったでしょうか?

それと、「記述漏れの所」だけはVBEの「ThisWorkbook」という所に
コピーしましたけど、これも大丈夫でしょうか?

あと、最後に追記して頂いた通り、
コード中の「ComboBox1」を「ListBox1」に「全て」置き換えたのですが・・・。

どこか手順が違うっぽい所はありますか?

ホント、お手数かけてすみません(T_T)
よろしければでいいので、またここ覗かれましたらよろしくお願いします(T_Y)

補足日時:2004/05/17 21:34
    • good
    • 0

#4 diashunです。


記述漏れ↓
VBEの「ThisWorkbook」に以下をコピーしてください。

Option Explicit

Private Sub Workbook_Open()
Dim strDefAry() As String
Dim i As Integer
ReDim strDefAry(0 To 9) As String '仮に10種類の文字列(ランダムな文字)を登録します。

strDefAry(0) = "15-G"
strDefAry(1) = "11-A"
strDefAry(2) = "15-V"
strDefAry(3) = "10-H"
strDefAry(4) = "11-R"
strDefAry(5) = "13-Y"
strDefAry(6) = "19-X"
strDefAry(7) = "00-D"
strDefAry(8) = "01-W"
strDefAry(9) = "15-K"

For i = 0 To 9
Sheet1.ComboBox1.AddItem strDefAry(i)
Next i

Sheet1.ComboBox1.Visible = True
ThisWorkbook.Sheets(1).Activate

End Sub
    • good
    • 0

#4 diashun です。


VBAをご理解いただけるとして、こういう方法もありますということを・・・
Sheet1にVBAコントロールボックスのCommandButton1」と「ListBox1」を任意の位置に貼り付けます。
Module1を追加して、以下のコードをVBEにコピペしてください。
「Sheet1」↓
Option Explicit

Private Sub CommandButton1_Click()
Set_String1
End Sub

「Module1」
Option Explicit

Public Sub Set_String1()
Dim strCell As String, lngRowNum As Long, strDefStr As String
Dim i As Integer

strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力")
strDefStr = Sheets(1).ComboBox1.Text
lngRowNum = ActiveCell.Row
Call Set_String2(strCell, strDefStr, lngRowNum)
strDefStr = Sheets(1).ComboBox1.Text
End Sub

Public Sub Set_String2(strCell As String, strDefStr As String, lngRowNum As Long)
Dim i As Integer

Range(Cells(lngRowNum, strCell), Cells(lngRowNum, strCell)).Activate
Range(Cells(lngRowNum, strCell), Cells(lngRowNum, strCell)) = strDefStr
End Sub

上記作業が終わったら、Bookを一度保存して終了してください。
再度Bookを開くと、ListBox1とCommandButton1が表示された「Sheet1」が表示されるはずです。
次に、文字列を自動表示したい行をどれかクリックします。さらにListBox1をクリックして「表示したい文字列」をクリックし「CommandButton1」をクリックすると、選んだ文字列がを入力したい列を指定する画面が表示されるので、ここで列記号(例:A,D,F等)を入力し「OK」ボタンを押すと、選択行の指定列にLisutBoxで指定した文字列が表示されるので、後、「F2」を押してセルの編集モードにして入力します。
以上で完了です。
    • good
    • 0

「Sheet1」で作業することを前提として、


VBAを使いますが、VBEを起動し「Sheet1」のVBEエディタに以下のコードを入力してください。↓

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Value = "15-G"
End Sub

これで「Sheet1」の任意のセルを選択したときに自動で「15-G」の文字列が入力されます。
後は「F2」キーを押せば、選択セルの最後の文字列にキャレットが点滅して入力待ち状態になります。
「noitigo」さんの目的にかなうかどうかわかりませんが・・・
こういうのではだめでしょうか?
判りにくければ補足にてご連絡下さい。
    • good
    • 0
この回答へのお礼

これも私的にはかなりそそりました!
ですが、どのセルにカーソルを持っていっても、「15-G」が出てしまうのです…
特定の列だけに出るようになったらかなり便利なのですが。それと「15-G」以外でもリストのような感じで出るような機能はつけれるものなのでしょうか?

なんか、とても御無礼な注文をつけてるようですみませんm(_ _)mそういう方法がありましたらでかまいませんので。

お礼日時:2004/05/17 15:58

>セルの中に最初から「15-G」という文字列を


表示させておいて
15Gはセルに入力済みですか。
入力済みであれば、そう見えているし、同じ値15Gを
各セルに入力するのは簡単です。
入力済みで無いが、15Gを出すのは、(1)書式-ユーザー定義か(2)VBAを使うしかありません。
この15Gに当たる値は、15Gのほかにも沢山種類が有るのではないですか。その場合は書式では対応できません。
リストボックスに
15G
17B
23D
・・・
とかを出して、15Gをクリックすると15G113とセルにセットする方法を述べます。
空きのE1:E3に
15G
17B
23D
と入れる。
リストボックスをシートに貼りつけ
プロパテイのListFillRangeをE1:E3
リストボックスをダブルクリック
VBE画面に下記を貼りつけ。
Private Sub ListBox1_Click()
ActiveCell.Offset(-1, 0).Activate
ActiveCell = ListBox1.List(ListBox1.ListIndex) & ActiveCell
End Sub
あるセルに113と入力しEnter。
リストボックスの中の15Bをクリック。
113と入れたセルが、15B113になる。

この回答への補足

すみません。

>リストボックスの中の15Bをクリック。
113と入れたセルが、15B113になる。

の部分がよくわからなかったのです・・・
リストボックスは「コントロールツールボックス」内にあるのを見つけ、リストボックスを作ってListFillRangeをE1:E3にするまでは出来たのですが、数字を(ここでも113と)セルに入力して「リストボックス」の中の「15-Bなどの文字」を選択できないのです(TT)

これまた何かやり方が悪いのでしょうか?
毎度毎度すみません(T_T)

補足日時:2004/05/17 15:17
    • good
    • 0
この回答へのお礼

再びお手をお貸し下さいましてありがとうございます!

>(1)書式-ユーザー定義か(2)VBAを使うしかありません。

とりあえず「ユーザー定義」を試してみました!
espreiさんのアドバイスもありまして、だんだん目的の機能に近づいてきました!

ですが、

>15Gのほかにも沢山種類が有るのではないですか。

そうなんです。「15-G」は架空のある「工事番号の頭の方につく文字列」なのですが、今のところそれしかないのでそれだけでいいと思い込んでいましたが、実は私も今後変わってくるのではと思ってはいました・・・。(工事が増えるにつれ番号や記号も変わってくるでしょうし・・・。)

なので、

>リストボックスに
>15G
>17B
>23D
>・・・
>とかを出して、15Gをクリックすると15G113とセルにセットする方法を述べます。

は、とても助かりますm(_ _)m
とりあえず、一度やってみます。
出来ましたらまた(補足にて)ご報告を致します。

お礼日時:2004/05/17 14:58

たとえばこんな方法があります。


ユーザー定義で「"15-G"#」と入力しておきます。
(@ではなく#です)
そしてセルには0を入力しておきます。
#だと0は表示されません。
しかし入力はされているので、15-Gは表示されます。
0が入力されていても、次にそのセルに数字を入力する時に上書きされるので0は勝手に消えてくれます。
    • good
    • 0
この回答へのお礼

>ユーザー定義で「"15-G"#」と入力しておきます。

この方法は使えますね!
4桁の数字入力時にいったん「15-G」は消えてしまいますが、入力し終わった後の表示は、私の思った通りの表示になりました!あとはそのセルに入力規則などで他の人にもわかるように入力の仕方のメッセージなど加えるようにして伝わるようにすれば目的はほぼ達成されそうです!

御アドバイス感謝ですm(_ _)m

お礼日時:2004/05/17 14:37

アドバイスとしてですが、表示させたいセルすべてに" "(空白)を入力しておいてはいかがでしょうか。

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
参考にさせて頂きますm(_ _)m

お礼日時:2004/05/17 14:31

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qチェックボックスの箱のサイズとフォントサイズは変更できるの?

こんにちわ。

エクセル2000でチェックボックスを作成したのですが、
やや、小さいのでサイズを大きくしたいのです。
ボックスサイズ、ボックスの横に入れる文字の
フォントサイズは大きくできるのでしょうか?
もし、できるのなら方法を教えてください。

よろしくおねがいします。

Aベストアンサー

コントロールツールボックスのチェックボックスならプロパティにFontがあるので変更できます。

フォームのチェックボックスやオプションボタンのフォントサイズは変更できなかったと思いますが、変更したように見せかけはできます。使用上、特に問題はないと思います。(だからダイアログにフォントがない?)

チェックボックスの位置によって、
(1)チェックボックス(四角)がセルの中央にある場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 チェックボックス(四角)の右横のセルにチェックボックスの説明のテキストを入れます。
 セルの書式設定でフォントが変更できます。
(2)チェックボックス(四角)をセルの境目などにセットする場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 図形描写からテキストボックスを選択し、チェックボックスの説明のテキストを入れます。
 テキストボックスは『線なし』にしておきます。2行で表示したりもできます。
 チェックボックスとテキストボックスを重ねて、見た目を調節します。
 テキストボックスを選択し、右クリック→順序→最背面へ移動 とします。

ご参考に。

コントロールツールボックスのチェックボックスならプロパティにFontがあるので変更できます。

フォームのチェックボックスやオプションボタンのフォントサイズは変更できなかったと思いますが、変更したように見せかけはできます。使用上、特に問題はないと思います。(だからダイアログにフォントがない?)

チェックボックスの位置によって、
(1)チェックボックス(四角)がセルの中央にある場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 チェックボックス(四角)の右横のセ...続きを読む

QEXCEL(VBA) セルをクリックしたときの処理

何度もお世話になります。

A5:A20のどれかをクリックしたときに
クリックしたセルが値が入力済みか確認してから
ファイルを名前を付けて保存したいのですが
クリックしたという情報(イベント?)の取得方法が
わかりません。

(1)どのようにチェックすればよいのでしょうか?
(2)また、皆さんはどのようにしてこのような問題を解決してるのでしょうか?

よろしくお願いします。

Aベストアンサー

Sheet1だとして、
Sheet1のマクロで

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Target.Column = 1 And Target.Row >= 5 And Target.Row <= 20 Then
If Target.Value <> "" Then MsgBox "入力済み"
End If
'
End Sub

と入れると、クリックしたセルがA5からA20のどれかで
かつセルに値が入っているときのみ”入力済み”とメッセージが表示されます。
このメッセージ表示の部分を、「名前を付けて保存」の処理に置き換えてはいかがでしょうか。

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

Q改ページの2ページ目の作り方

エクセルで、改ページプレビューを押すと、
青い線が出てきて印刷範囲を指定できますよね?
あれでA4一枚で印刷できる大きさなんですけど
2枚に分けたい時はどうすればいいのでしょうか?
増やそうとしても一枚目の範囲が大きくなるだけ
なんです。
質問の仕方がうまくなくて申し訳ないです。

Aベストアンサー

上下に分けたい場合、分割したい行の行番号を右クリックして改ページ挿入。
左右に分けたい場合、分割したい列の列番号を右クリックして改ページ挿入。

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Q自分の左隣のセル

セルB1に=A1と入力してますが、
左隣のセルという指定は出来ますか?
行は同じで、列番号-1というように指定したいです。

Aベストアンサー

こんばんは!

当方もNo.2さんと同じ疑問を持ちつつ・・・

とりあえず
=INDIRECT(ADDRESS(ROW(),COLUMN()-1))
という数式を入れておけば、どのセルに数式を入れても
常に左隣のセルが返ります。

※ A列に上記数式を入れるとエラーになります。m(_ _)m


人気Q&Aランキング