- ベストアンサー
エクセル関数の文字列操作で困ったことがありますか?
- エクセル関数で外部データをシートに取り込む際、18頭の場合のオッズデータ表示に問題が発生します。
- この問題を解決するために、MID関数を使用してオッズデータを分割して馬番のセルに貼り付ける方法があります。
- 参考書ではVBAを使用してオッズの取り込みから貼り付けまで行えるようですが、エクセル関数でも処理できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロ組んでみました。 貼り付け対象セルについては修正が必要かとは思います。 '入力データは1行目のみ 'カンマ編集(CSV化)していない '拡張子は".txt" '要素数は最大18 Dim FullPath As String Dim FileName As String Dim intLen As Integer Dim intI As Integer Dim strData(18) As String 'ファイルオープンダイアログ表示 FullPath = Application _ .GetOpenFilename("テキスト ファイル (*.txt), *.txt") 'オープンダイアログでファイルが指定されたら処理実行 If FullPath <> "False" Then 'ファイルオープン Workbooks.OpenText FileName:=FullPath, StartRow:=1, DataType:= _ xlFixedWidth, FieldInfo:=Array(0, 2) 'ファイル名取得 FileName = Dir(FullPath) With Workbooks(FileName).Worksheets(Left(FileName, Len(FileName) - 4)) '開いたファイルの1行目に文字列があれば処理 If .Cells(1, 1) <> "" Then '読み込んだファイルの文字数が6の倍数かチェック intLen = Int(Len(.Cells(1, 1)) / 6) If Len(.Cells(1, 1)) = intLen * 6 Then For intI = 1 To intLen '6バイトづつ抽出 strData(intI) = Mid(.Cells(1, 1), 6 * intI - 5, 6) If IsNumeric(strData(intI)) = False Then '切り出したデータが数値以外だったらエラー MsgBox "入力データが数値以外" Exit Sub End If Next intI Else '読み込みファイルエラー(6文字づつになっていない。) MsgBox "読み込みファイルエラー(データ長不正)" Exit Sub End If Else '読み込みファイルエラー(文字列がない) MsgBox "読み込みファイルエラー(入力なし)" End If End With '開いたファイルをクローズ Workbooks(FileName).Close '貼り付けたいシート(=Sheet2)への処理 With ThisWorkbook.Sheets("Sheet2") '.Cells(行数,列数) For intj = 1 To intLen '1行目1列(A1セル)から1行目18列(R1セル)へデータ設定 .Cells(1, intj) = Val(strData(intj)) / 10 Next intj End With End If
その他の回答 (1)
- mshr1962
- ベストアンサー率39% (7417/18945)
CSV形式のファイルのデータが数値のみの文字列の場合、 エクセルは読み込み時に数値として判定します。 拡張子をTXTにするか、「データ」「外部データの取り込み」「テキストファイルのインポート」で 「列のデータ形式」を「文字列」にしてください。
お礼
「列のデータ形式」を「文字列」にして実行しましたが状況は変わらずです。残念!!
お礼
intjの変数が定義されていないコンパイルエラーが出ましたが、そこを修正して実行してみました。確かに1.72E+104などという表示はされなくなりましたが、今までうまくいっていた17頭以下のケースも含め、すべて「読み込みファイルエラー(入力なし)」のメッセージBOXが出て「OK」クリックとともに消えてしまいました。もう一息という感じです。
補足
すみません、質問者okkoutaです。今やってみたら上手くいきました。すごい!!!ありがとうございます。一歩前進です。