- ベストアンサー
Excel2007で行指定して数字を記号に変換
- Excel2007で行指定して数字を記号に変換する方法について教えてください。
- マクロボタンを押すと行指定ダイアログボックスが表示され、指定された行のXセルに0~9の数字が入り、V列W列とY列Z列のセルに対応する数字が入ります。
- V列W列とY列Z列に入った数値は、0が●、1~9が×に変換されます。また、変換された数字はB20~E29のセルに一括で入力されます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>行指定されたセルXに0~9の数字を0から順に一回一回入れては出来上がったのをsheetBに、という形を希望してます。 了解です。拡張性等を考えていませんが、以下のコードでどうでしょうか? Option Explicit Sub SetConfig(ByRef InputSheet As Worksheet, ByRef OutputSheet As Worksheet, ByRef InputColumn As Integer, ByRef FunctionColumn() As Integer, ByRef OutputRow As Integer, ByRef OutputColumn() As Integer) '各種設定値 Set OutputSheet = Worksheets("ASheet") '値を出力するシート Set InputSheet = Worksheets("BSheet") '値を変換する関数が存在するシート InputColumn = 24 'X列 ReDim FunctionColumn(1 To 4) FunctionColumn(1) = 22 'V列 FunctionColumn(2) = 23 'W列 FunctionColumn(3) = 25 'Y列 FunctionColumn(4) = 26 'Z列 OutputRow = 20 ReDim OutputColumn(1 To 4) OutputColumn(1) = 2 'B列 OutputColumn(2) = 3 'C列 OutputColumn(3) = 4 'D列 OutputColumn(4) = 5 'E列 End Sub Sub ConvertValuetoString() Dim i As Integer, j As Integer, buf As String Dim InputSheet As Worksheet '値を変換する関数が存在するシート Dim OutputSheet As Worksheet '値を出力するシート Dim InputRow As Integer '取得した値を入力する行番号。InputBoxで受ける関係上、stringとする。 Dim InputColumn As Integer '取得した値を入力する列番号 Dim FunctionColumn() As Integer '取得した値を変換するセルの列番号 Dim OutputRow As Integer '変換した値を出力する基点となる行番号。 Dim OutputColumn() As Integer '変換した値を出力する列番号。 Dim myStr As String '設定取得 Call SetConfig(InputSheet, OutputSheet, InputColumn, FunctionColumn, OutputRow, OutputColumn) '行番号取得 buf = InputBox("対象の行番号を入力して下さい。") If StrPtr(buf) = 0 Then 'キャンセルされた場合。 Exit Sub ElseIf Not IsNumeric(buf) Then MsgBox ("入力された値は数字ではありません。") Exit Sub ElseIf CInt(buf) < 0 Then MsgBox ("行番号として0以下の値を指定する事はできません。") Exit Sub End If InputRow = CInt(buf) For i = 0 To 9 '0~9の値をセルに入力。 InputSheet.Cells(InputRow, InputColumn).Value = i '変換された値を記号に変換して転記。 For j = 1 To 4 If InputSheet.Cells(InputRow, FunctionColumn(j)).Value = 0 Then myStr = "●" Else myStr = "×" End If OutputSheet.Cells(OutputRow + i, OutputColumn(j)).Value = myStr Next j Next i '0~9を入力したセルの文字を削除。 InputSheet.Cells(InputRow, InputColumn).ClearContents End Sub
その他の回答 (4)
- Mathmi
- ベストアンサー率46% (54/115)
>中古で買ったノトパなんで色々入っててわかりませんが使ってるのはExcel2007 Open officeやLibraだと、ExcelではなくCalcの筈なんで、純正のMicrosoft Officeで間違いないみたいですね。 (となると、どうしてこんなに変な所でエラーが起こるのか……) >やり方が分からないです '(アポストロフィ)を付けると、それ以降をコメントアウトできます。コメントアウトした部分は実行されないので、当然エラーも起きません。 問題の箇所はエラートラップであり、入力値が正しいなら不要な箇所なので、エラーが起こるくらいならいっそ使わないという選択肢も取れる場所です。 コメントアウトしたい行を選択し「コメントブロック」ボタンを押すと、自動的にコメントアウトしてくれます。 「コメントブロック」ボタンがない場合は、ツールバーを右クリック→[編集]にチェックを付ければ、ボタンを含むバーが出る筈です。 逆にコメントアウトを外したい場合は、隣の「非コメントブロック」を押せば解除できます。 (添付画像参照) >括弧の部分が赤文字になりThen が指摘されてる状態 エラーの内容は変わりませんでしたか。 新規ファイルに、該当のコードだけを、コピー&ペーストで貼り付けた状態で動かしてみても同様のエラーが発生するなら、正直お手上げです。 該当部分をコメントアウトor削除するのが一番早いでしょう。
お礼
構文エラーになりますね。 コメントアウトってmathmi さんがソースに書いてくださったコメントを同じように書けるってこと何ですか?
補足
緊急連絡です!!!意味がわかりました!そしてエラー行をコメントアウトしたらコンパイルに成功したのでやってみると なんとも、感動的で美しく作動すること(ToT)メチャメチャ嬉しいです。mathmi さんありがとうございました。 少しずつ慣れていきますので今後ともよろしくお願いいたします。
- Mathmi
- ベストアンサー率46% (54/115)
相変わらず、こちらで発生しないエラーが発生しますね。 原因が分からないので、どう修正していいものか見当もつきません。 自分のコードを丸コピーしていて、修正もコピーミスもないものとします。 「コンパイルエラー:修正候補:then」という事は、Ifに対応するThenが存在しない、という事だと思いますが、ちゃんとElseIfもThenも存在しますし……。 現状できる事と言えば [ElseIf Not IsNumeric(buf) = True Then] と、=Trueを付けてみて様子を見てみる、くらいでしょうか。 或いはいっそ、[If StrPtr(buf) = 0 Then]~[End If]までのエラートラップ部分をコメントアウトしてしまうか、ですね。 後、確認なのですが、使用ソフトはOffice Excelですよね? Libre OfficeとかOpen Officeとかじゃないですよね? バージョンは幾つでしょうか?
お礼
ご返答ありがとうございます。[ElseIf Not IsNumeric(buf) = True Then]を書いてみたのですが括弧の部分が赤文字になりThen が指摘されてる状態になります。 >或いはいっそ、[If StrPtr(buf) = 0 Then]~[End If]までのエラートラップ部分をコメントアウトしてしまうか、ですね。 やり方が分からないです。_(^^;)ゞ >後、確認なのですが、使用ソフトはOffice Excelですよね? Libre OfficeとかOpen Officeとかじゃないですよね? バージョンは幾つでしょうか? 私はあまり詳しくは無いので…確認の仕方はどうすればよろしいですか? 中古で買ったノトパなんで色々入っててわかりませんが使ってるのはExcel2007です。
- Mathmi
- ベストアンサー率46% (54/115)
これが3度目の質問のようですが、回答がないならともかく「質問内容が分かりません」という回答が付いているのですから、再度質問する場合は質問文は修正するべきだと思います。 正直自分も、どんなコードが欲しいのか分かりません。 質問内容を確認します。 既に存在するもの ・X列のn行目(以下Xnと表記)に0~9のいずれかの値が入ると、それに対応してVn、Wn、Yn、Znの四つのセルに値が入力される。 新たに作成したいもの ・ダイアログボックスで行番号を入力する。これはシートAのボタンを押したら実行するようにする。 ・入力された行番号(仮にnとする)に基づき、シートBのXnに0をXn+1に1を……Xn+9に9を入力する(合計10個のセルに入力する)。 ・それに対応して、上記にあるように、Vn~Vn+9、Wn~Wn+9、Yn~Yn+9、Zn~Zn+9にも自動的に入力される。 ・シートBのVnの値を変換してシートAのB20に、シートBのVn+1の値を変換してシートAのB21に……シートBのVn+9の値を変換してシートAのB29に入力する。 ・同様にシートBのW列はシートAのC20:C29に、シートBのY列はシートAのD20:D29に、シートBのZ列はシートAのE20:E29に入力する。 ・変換法則は、シートBの値が0の場合は●、1~9だった場合は×。 以上で合っていますか? この場合、正直作成する意味がほぼないマクロではあるのですが。
お礼
こんにちはmathmi さん。多分、mathmiさんが思われてる通りだとは思いますが、一つ気になった箇所があったのでその箇所を指定して、私の考えてる事を再度お伝えさせていただきます。 >入力された行番号(仮にnとする)に基づき、シートBのXnに0をXn+1に1を……Xn+9に9を入力する(合計10個のセルに入力する)。 行指定されたセルXに0~9の数字を0から順に一回一回入れては出来上がったのをsheetBに、という形を希望してます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
何度か同じ質問で回答がなかったのだと思いますが、たぶんやりたいことがはっきりと見ている人に届かないのだと思います。 一例として > X列の1マス1マスに0~9の数字のいずれかが 具体的に例をあげないと1マス1マスと書かれてもどこなのだろうとなります。 > 行指定されたセルX セルXってどこ?とか > セルA20~A29に0~9と数字を付ってますので もともと入っている?おおまかな説明には出てきていません。 具体的な例をあげて説明したほうがわかると思いますよ。 ボタンを押して5行目を指定したら X5に3が入ってあとどのセルに何が入るとかですね。 具体例を挙げて再度質問したら誰か回答してくれるかもですね。
お礼
こんばんはmathmi さん。いかがお過ごしでしょうか。台風がやっとさりましてこちらは一安心です(^-^)ゝ゛ コンパイルエラー修正候補でthen が指摘されました。 ElseIf Not IsNumeric(buf) Then MsgBox ("入力された値は数字ではありません。") Exit Sub 修正お願い致します。