- ベストアンサー
セルに最初からある文字列を表示させておいて、そのセルを選択したら、その文字列の後から3桁数字を入力できるようにしたい
タイトルが長くてすみませんm(_ _)m エクセル(97)に関しての質問です。 例えば、セルの中に最初から「15-G」という文字列を 表示させておいて、(ダブルクリックして編集という 形じゃなくて)そのセルを選択しただけで、 その文字列の後から3桁の数字を入力できるように したいのですがいい方法はないでしょうか? 他にやってみた方法で、ユーザー定義(私が考えた定義→「"15-G"@」)でセルに3桁の数字(例えば567)を入力しますと、「15-G567」というように表示させる事が出来たのですが、何も入力されてない時は当たり前ですが空白のままです。 出来れば、最初から「セルの中の始めに15-Gという文字列を」表示させておきたいのですが…
- みんなの回答 (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」は貼り付けられていますね? 以上、またご連絡をお待ちします。 でも、お忙しいならいつでもいいですよ。 気長にお付き合いしますので、(^_^)
その他の回答 (9)
- diashun
- ベストアンサー率38% (94/244)
またまた#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を学んでいただくには少しは参考になるかも・・・ということで宜しくお願い致します。
お礼
お付き合い頂きまして本当にありがとうございます!!! もう一度挑戦してみました! 「CommandButton1」の貼り付けは、コントロールツールボックスから作り直しました。 >>strCell = InputBox("入力する列を「A,B,C,・・・」と入力して下さい。", "列入力") これも原文通り修正し直しました! ですが、どうしても「コンパイルエラー 構文エラー」が出てしまいます。 あと、他に気づいた事は、「Module1」の所が紺色に反転しています。何か手がかりになりますでしょうか? >ただ、僅かのセル入力でしたらここまでする手間が必要なのかなと疑問にも思いますが、・・・ ま、VBAを学んでいただくには少しは参考になるかも・・・ということで宜しくお願い致します。 結果はどうあれ、私もいい勉強にもなると思いましたので、ここは最後まで成し遂げたいと思います。 改めて、お礼申し上げますm(_ _)m
- imogasi
- ベストアンサー率27% (4737/17069)
#3です。 >リストボックスの中の15Bをクリック。 113と入れたセルが、15B113になる。の部分がよくわからなかったのです・ リストボックスを貼りつけて、ListFillRangeを入力し たあと、デザインモードを脱しないといけません。 VBE画面の「実行」をクリックしたとき、出てくる鉛筆と定規のアイコンをクリックし、リストボックスを貼りつけたシートに戻り、目的のセルに113と入力し、リストボックスの15Bをクリックします。(改行後下セルへ移動にしておくこと。)
お礼
ご返信感謝いたします。 「デザインモード」のことは解決できました! ですが、操作してるうちに「リストボックス」から 選択した「(例えば)15B」などが意図したセルに出なかったり、よく「アプリケーション定義またはオブジェクト定義のエラー」が出てきたりします。 今試してる家での環境がエクセル2002なのでそれも関係してるのですかね??? でも、色々な方法があるのを知り、とてもエクセルの奥の深さを知らされました! 本当に感謝です<(_ _)>
- diashun
- ベストアンサー率38% (94/244)
またまた#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)
- diashun
- ベストアンサー率38% (94/244)
#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
- diashun
- ベストアンサー率38% (94/244)
#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」を押してセルの編集モードにして入力します。 以上で完了です。
- diashun
- ベストアンサー率38% (94/244)
「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」さんの目的にかなうかどうかわかりませんが・・・ こういうのではだめでしょうか? 判りにくければ補足にてご連絡下さい。
お礼
これも私的にはかなりそそりました! ですが、どのセルにカーソルを持っていっても、「15-G」が出てしまうのです… 特定の列だけに出るようになったらかなり便利なのですが。それと「15-G」以外でもリストのような感じで出るような機能はつけれるものなのでしょうか? なんか、とても御無礼な注文をつけてるようですみませんm(_ _)mそういう方法がありましたらでかまいませんので。
- imogasi
- ベストアンサー率27% (4737/17069)
>セルの中に最初から「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になる。
お礼
再びお手をお貸し下さいましてありがとうございます! >(1)書式-ユーザー定義か(2)VBAを使うしかありません。 とりあえず「ユーザー定義」を試してみました! espreiさんのアドバイスもありまして、だんだん目的の機能に近づいてきました! ですが、 >15Gのほかにも沢山種類が有るのではないですか。 そうなんです。「15-G」は架空のある「工事番号の頭の方につく文字列」なのですが、今のところそれしかないのでそれだけでいいと思い込んでいましたが、実は私も今後変わってくるのではと思ってはいました・・・。(工事が増えるにつれ番号や記号も変わってくるでしょうし・・・。) なので、 >リストボックスに >15G >17B >23D >・・・ >とかを出して、15Gをクリックすると15G113とセルにセットする方法を述べます。 は、とても助かりますm(_ _)m とりあえず、一度やってみます。 出来ましたらまた(補足にて)ご報告を致します。
補足
すみません。 >リストボックスの中の15Bをクリック。 113と入れたセルが、15B113になる。 の部分がよくわからなかったのです・・・ リストボックスは「コントロールツールボックス」内にあるのを見つけ、リストボックスを作ってListFillRangeをE1:E3にするまでは出来たのですが、数字を(ここでも113と)セルに入力して「リストボックス」の中の「15-Bなどの文字」を選択できないのです(TT) これまた何かやり方が悪いのでしょうか? 毎度毎度すみません(T_T)
- esprei
- ベストアンサー率56% (718/1271)
たとえばこんな方法があります。 ユーザー定義で「"15-G"#」と入力しておきます。 (@ではなく#です) そしてセルには0を入力しておきます。 #だと0は表示されません。 しかし入力はされているので、15-Gは表示されます。 0が入力されていても、次にそのセルに数字を入力する時に上書きされるので0は勝手に消えてくれます。
お礼
>ユーザー定義で「"15-G"#」と入力しておきます。 この方法は使えますね! 4桁の数字入力時にいったん「15-G」は消えてしまいますが、入力し終わった後の表示は、私の思った通りの表示になりました!あとはそのセルに入力規則などで他の人にもわかるように入力の仕方のメッセージなど加えるようにして伝わるようにすれば目的はほぼ達成されそうです! 御アドバイス感謝ですm(_ _)m
- kinokoyasan2004
- ベストアンサー率59% (16/27)
アドバイスとしてですが、表示させたいセルすべてに" "(空白)を入力しておいてはいかがでしょうか。
お礼
早速のご回答ありがとうございます。 参考にさせて頂きますm(_ _)m
お礼
もう一度、diashunさんのアドバイスを熟読して、一つ重大な勘違いに気づきました!!! 一つ「モジュール」の部分が気になったので、VBEのメニューを色々覗いてみましたら、「挿入」のメニューに「標準モジュール」の項目があったので、それを選びましてそれで出てきたファイルに「●「Module1」のコード」をコピーしましたら完成致しました!(^0^)! 動作も問題ないです! Sheet1に全てコピーしてましたので駄目だったみたいです・・・。素人すぎて情けないです(ーー;) でも、やり遂げて本当によかったです! この度は本当にご親切、そしてアドバイスありがとうございましたm(_ _)m