エクセル関数の文字列操作で困ったことがありますか?

このQ&Aのポイント
  • エクセル関数で外部データをシートに取り込む際、18頭の場合のオッズデータ表示に問題が発生します。
  • この問題を解決するために、MID関数を使用してオッズデータを分割して馬番のセルに貼り付ける方法があります。
  • 参考書ではVBAを使用してオッズの取り込みから貼り付けまで行えるようですが、エクセル関数でも処理できます。
回答を見る
  • ベストアンサー

エクセル関数の文字列操作で困ったことが

競馬のオッズデータの取り込みを行っていますが、外部データをエクセルのシート(sheet2)に取り込んだ際、決まった場所に単勝と複勝のオッズデータが入っているのですが、(000022000336・・・のように6バイトを1頭分のオッズとして表示:上の例では馬番(1)のオッズが2.2倍、馬番(2)のオッズが33.6倍というように)17頭までは文字列でずらーっと表示されるのになぜか18頭のときだけ1.17E+105などというような表示になってしまいます。 このオッズデータからMID関数で6文字ずつ分割してそれぞれの馬番のセルに貼り付けていたので18頭の時はエラーになってしまいます。参考書はVBAでプログラムを組んでオッズの取り込みからセルへの貼り付けまでスムーズに行えているようですが、私がやってもVBAでうまくいかないためやむを得ずエクセル関数で処理した次第です。 この問題うまく解決できますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • HAL2010
  • ベストアンサー率24% (37/150)
回答No.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

okkouta
質問者

お礼

intjの変数が定義されていないコンパイルエラーが出ましたが、そこを修正して実行してみました。確かに1.72E+104などという表示はされなくなりましたが、今までうまくいっていた17頭以下のケースも含め、すべて「読み込みファイルエラー(入力なし)」のメッセージBOXが出て「OK」クリックとともに消えてしまいました。もう一息という感じです。

okkouta
質問者

補足

すみません、質問者okkoutaです。今やってみたら上手くいきました。すごい!!!ありがとうございます。一歩前進です。

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

CSV形式のファイルのデータが数値のみの文字列の場合、 エクセルは読み込み時に数値として判定します。 拡張子をTXTにするか、「データ」「外部データの取り込み」「テキストファイルのインポート」で 「列のデータ形式」を「文字列」にしてください。

okkouta
質問者

お礼

「列のデータ形式」を「文字列」にして実行しましたが状況は変わらずです。残念!!

関連するQ&A

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • エクセルの文字列操作

    住所録の様式で A列にNo、B列に氏名、C列に住所のファイルがあり、 C列の住所で、1個のセルに何故かしら「住所と電話番号」が入っています。 住所と電話番号を夫々別の列に分割したくて、 電話番号は、RIGHT 関数で取り出しました。 住所は、文字数が一定でないので、LEFTまたはMID関数では出来ません。 ここで質問です 住所データの末尾に混在する電話番号は10文字の場合に限定し、 文字数の異なる、住所(○○市XX町△△番地○△荘2-103など)のみ 抽出する方法はありませんか。 なお、VBAなどは無知です、エクセル関数だけの操作があれば教えてください。

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • Excel(文字列操作)についての質問です。

    今、Excelで、最初の文字とアンダースコアのあとの文字を取り出す方法を考えています。 (例:ABC_DEF_GHI→ADG) しかし、アンダースコアが何個あるかわかりません。 現在、A1セルに、ABC_DEF_GHIと入力されているとき、 =LEFT(A1,1) & MID(A1,FIND("_",A1,1)+1,1) & MID(A1,FIND("_",A1,FIND("_",A1,1)+1)+1,1)・・・・・ と入力すると取得は出来るのですが、アンダースコアの数が変更になると対応できません。 関数、VBAどちらでも結構ですので、よろしくお願いいたします。

  • エクセルVBAの文字列操作について

    エクセルVBAの文字列操作について 例えば、[1-10,12,15-20,22-38]と入っているセルがあるとします。 各数字は","で区切られています。このセルに数を足したり引いたりしたいのです。 例えば、このセルから”5”を引いて[1-4,6-10,12,15-20,22-38]と表示したり、 "21"を足して[1-10,12,15-38]と表示したいのですが どなたかご教授いただけないでしょうか?

  • 文字列の計算について。。。

    Excelでなのですが、外部データの取り込みをしました。 その時に、文字列で取り込んだ数値を計算したいのですが、 うまく出来ません。 セルの書式設定で数値にしたのですが、計算出来ません。 関数を使って数値に変換すると出来たのですが、 50枚シートがあるものが10ブックあります。 計算したい列もそれぞれのシートでばらばらなので困ってます。 簡単に出来る方法はないでしょうか?

  • Excelの関数に別セル文字列を含める方法について

    Excelの関数に別セル文字列を含める方法について Excelについて質問させていただきます。 あるセルの文字列を用いて別のセルの関数に利用することはできますでしょうか? 例) ・目的  シート1のA2に、シート<AAAA>のA1セルにある"test"を表示させたい ・方法 ○シート1 A1 "<AAAA>" A2 <AAAA>!A1 (ここの<AAAA>を何らかの方法にてA1を参照にさせ、表示させたい) ○シート<AAAA> A1 "test"

  • エクセル関数について

    エクセルの関数についてなのですが、例えば「セルA3」に「セルB2」の値を表示させるには「=(B2)」と「セルA3」に表示させてます。別のSheetの値も表示できるのでしょうか?例えば「Sheet1.Range("A3")」の値をSheet2のA1に表示させたい場合Sheet2のA1にはどのような関数を入力していけばよいのでしょうか?VBAは使わずに表示したいのですが。関数はまだほとんど使ったことがないので分かる人いたら教えてください。よろしくお願いします。

  • エクセル ある文字列を入れるとある文字列を返す

    エクセルでの関数、ど素人です。一応自分で調べたのですが、無理なので質問させていただきます。よろしくお願いいたします。 エクセルで、時刻ですが文字列として1745~2345までを手入力します(1745,とか2000とか2330とか。。。。。) 入れた文字列によって、すぐ横のセルに1745、1800、1815であれば8.00、1830からは0.25刻みで8.25、1845であれば8.50、1900であれば8.75。。。。2330であれば13.25、2345であれば13.50と言ったように、入力した文字列に対しある特定の文字列を自動的に入れたいのですが、どのような関数を使えばよろしいのでしょうか。 私が行おうとしたのは、別シートに文字列一覧を作り、if(特定のセル(手入力するセル)=別シートの1745~2345まで、横のセル=別シートの8.00、8.00、8.00~13.50まで)や、sumif、lookupを使ってみましたが撃沈です。 どなたか教えていただきたく、お願いいたします。

  • エクセルの文字列操作

    (1)A列にファイル名(文字数任意)と拡張子(文字数任意)が入力されています。 fileAaa.exl fileBbbbb.exlx fileCc.doc fileDddd.docx (2)↑のデータからMID関数を使ってB列にファイル名 C列に拡張子を表示させたい 質問1. A列の拡張子"."の位置が左から何文字目かを知るための関数名を教えてください。 質問2. MID関数やBVA以外でもっと簡単にできる方法があればおしえてください。