- ベストアンサー
エクセルで数字を文字に変換して同じセルに表示する方法
- エクセルのVLOOKUP関数を使用して、数字を文字に変換して同じセルに表示する方法を教えてください。
- 営業所を表す数字コードが多くあり、同じセルに数字と対応する文字を表示したい場合、VLOOKUP関数を使用すると便利です。
- IF関数では数が多すぎるため、単語登録も考えましたが、複数のPCで共有する表のため、別の方法が必要です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
前回のままでは何かと不都合があったので、 処理内容はほとんど変わってませんが処理を追加しました ・コードが空白/未入力のとき、入力ウィンドウを開く ・入力ウィンドウのキャンセルボタンを押した時、スキップする ・コードが数値以外のとき、処理をスキップする ------------------------------------- Sub changeShopName() '変数 Dim TargetBook As Workbook Dim ws1 As Worksheet Dim i, j As Integer Dim shopNo As Variant Dim shopName As String '営業所コード表を開く Dim ReturnBook As String ReturnBook = ActiveWorkbook.Name Application.ScreenUpdating = False Filename = "\data\shopDataFile.xls" '帳票ファイルから見たデータファイルのパス fullPath = ThisWorkbook.Path & Filename Workbooks.Open fullPath, ReadOnly:=Tru '営業所コード表を読み取り専用で開く Workbooks(ReturnBook).Activate Application.ScreenUpdating = True Set TargetBook = Workbooks("shopDataFile.xls") Set ws1 = Worksheets("sheet1") shopName = "" ' 処理 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row ' 入力コードチェック shopNo = ws1.Cells(i, 1) If IsEmpty(shopNo) Or shopNo = "" Then '未入力だったら入力ウィンドウを開く shopNo = CInt(Application.InputBox(prompt:= _ "営業所コードを入力してください。", _ Title:="コード入力")) If shopNo = "" Then '入力ウィンドウでキャンセルを押した時処理を飛ばす GoTo CAN End If ws1.Cells(i, 1) = shopNo End If If IsNumeric(shopNo) Then 'コードが数値のときのみ処理する Application.ScreenUpdating = False TargetBook.Activate For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(j, 1) = shopNo Then shopName = Cells(j, 2) End If Next j Workbooks(ReturnBook).Activate Application.ScreenUpdating = True ws1.Cells(i, 1) = shopName shopName = "" End If CAN: Next i '営業所コード表を閉じる TargetBook.Close End Sub ------------------------------------------ ・入力忘れがあった場合に入力ウィンドウから入力できます ・恣意的に未入力の場合は処理をキャンセルボタンで処理をスキップします ・変換済みの表にコードを追記した場合など、営業所名とコードが混在する場合に、営業所名が入っているセルは処理をスキップしコードが入ったセルだけ処理します ・対照表にないコードが入力された場合には、そのセルを空白にします。 ・正しいコードを入力するか、そのままもう一度処理ボタンを押すと、そのセルのみ処理します
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
>入力した同じセルに表示させたいのです 良く初心者がこれを言うが、 エクセルの関数に関する最も基本的な理解が欠けた質問です。 エクセルの関数は、引数というものを持ており、普通はセル番地で表します。そのセル番地の「セルの値」を元に、計算やその他の処理をして、結果を式を入れたセルに返します。その引数の中に式を入れるセルが含まれている場合は、エラーにします。 もうひとつ、セルに式を入れるとその式の値で置き換わり0になります。ですから本来の数式の使い方が出来ません。 VBAでやっても値で置き換わり、元のA1の値は消えます。 どうしてもやるなら、使わない列にA列を移し、A1に「移した列のデータ」で、関数の値を出し、A列の式を消す(値化)すれば、(その後、そして移した列のデータも抹消しても良い)それらしくなる。 ーー 質問者が言うようなことは、変数というものが使えるところの、VBAのようなプログラムでないと出来ません。 VBAでやるのは、この程度では無駄だと思うが、どうしてもやりたければ、質問者がVBAを勉強してください。 その結果のコードは簡単(数行)なんだが、基礎および周辺の理解なくして、回答をコピペしても仕方がない。 VLOOKUP関数もVBAで使える。 もっと先にエクセルについて知っておれば便利なことが沢山あるでしょう。 エクセルはそういう仕組みなんだ。そして表計算ソフトがそうなんだ。それはそれなりに初心者には判り易いのだと思う。 (入力データは残しているという点など)。 >IF関数でやるには数が多すぎますし コンピュター処理やエクセル関数は、思考過程では、場合分けを考えることができるものだが、普通はそれ向けの関数があり IFは表面から消えている。関数はその方向に持っていく道具でもある。 VLOOKUP関数も、「もし表の中にA1と一致した行が見つかったら・・」と言えなくも無いが、初心者以外はIF関数をつかわないようなこと。
お礼
ご回答有り難うございました。
- neochi_life
- ベストアンサー率43% (115/263)
あ、VBAマクロを設定するのは、作業を行うファイル(コードを入力して、支店名に書き換えたいファイル。以下作業ファイルとします)です。こちらのファイル名はなんでもいいです。共有ファイルに入れても同じ用に使用できたはずです。 共有フォルダにある作業ファイルのpath(パス)は自動で取得するようにしてあるので Filename = "\data\shopDataFile.xls" '帳票ファイルから見たデータファイルのパス この部分を間違えないようにしてください。 作業ファイルが置いてある場所はどこでもいいですが、添付画像のように、dataフォルダを作業ファイルと同じ場所に作ってくださいね。 フォルダ名、ファイル名を変えるのは構いませんが、その場合にはマクロの方もファイル名やフォルダ名に併せて修正してください。 dataフォルダの場所を違う場所に置く場合には Filename = "\data\shopDataFile.xls" '帳票ファイルから見たデータファイルのパス この部分を修正してください。
- neochi_life
- ベストアンサー率43% (115/263)
準備 1:セルのA列に営業所コード、B列に営業所名を入力した一覧表を作る ・1行目には、表のヘッダがあるものとします |A列 |B列 | |営業所コード|営業所名| |コード |名前 | 以下終わるまで こんな感じで作ってください 2:作業を行うファイルがある場所に、任意の名前のフォルダを作って1で作ったファイルをしまいます 3:VBAマクロを設定します やり方がわからない場合には「マクロを使ってVBAにチャレンジだ!」 http://www.sigoto.co.jp/excel/begin/bgmenu04.htm これを見てください 設定するマクロの本文は以下 Sub changeShopName() 'ここから '変数 Dim TargetBook As Workbook Dim ws1 As Worksheet Dim shopNo, i, j As Integer Dim shopName As String Dim ReturnBook As String '営業所コード表を開く ReturnBook = ActiveWorkbook.Name Application.ScreenUpdating = False Filename = "\data\shopDataFile.xls" '帳票ファイルから見たデータファイルのパス fullPath = ThisWorkbook.Path & Filename Workbooks.Open fullPath, ReadOnly:=Tru '営業所コード表を読み取り専用で開く Workbooks(ReturnBook).Activate Application.ScreenUpdating = True Set TargetBook = Workbooks("shopDataFile.xls") Set ws1 = Worksheets("sheet1") 'コード入力等の作業を行っているシート名 ' 処理 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row shopNo = ws1.Cells(i, 1) Application.ScreenUpdating = False TargetBook.Activate For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(j, 1) = shopNo Then shopName = Cells(j, 2) End If Next j Workbooks(ReturnBook).Activate Application.ScreenUpdating = True ws1.Cells(i, 1) = shopName Next i '営業所コード表を閉じる TargetBook.Close End Sub ' ここまで 4:マクロ起動用にフォームでボタンを作っておくと楽です ※この例では 1で作ったファイル名が shopDataFile.xls 2で作ったフォルダ名が data
- neochi_life
- ベストアンサー率43% (115/263)
<疑問点> ・使用したい帳票は、常時同じなの変わるのか? ・セルのA列に表示したいのは、営業所名だけ?それとも、コード+営業所名? <処理内容> 例えば、帳票は変わるものとして、A列に営業所コードを(伝表などを見ながら)入れていく マクロを動かすと、同じA列のセル内で、営業署名に書き換わる こんな感じで考えてみますが、違う場合には情報もらえると助かります。
お礼
4回もすみません、有り難うございます。(お礼はこの一件に纏めさせて頂きます。) 思っていたよりずっと大変なんですね…正直なところ目眩がします。 でもこれが出来るようになれば他にもアレやコレやに応用が効きそうなので、 とりあえず明日教えて頂いた通りに、やってみます。 書き込むだけでも大変なお手間だったかと存じます、 素人相手に懇切丁寧なご指導を、本当に有り難うございました。 お気持ちを無駄にしないよう頑張ります!