お世話になります。
CSVファイルをExcelで開いた時に発生する問題についての質問です。
元のCSVファイルのデータは、5項目(5列分)あります。
その内、4項目については、氏名などの文字列なので、Excelで開いても
別段問題なく表示されるのですが、問題とする1列に入っている
データが、ハイフンで結ばれた数字となっています。
実際の値は 1-2 や 2-3 や 6-4 などの値で、実は小学校の学年と
クラスを表したものです。
よって、ハイフンの左側は学年である 1~6 が入り、右側にはクラスの
数字が入っています(1組から6組の絶対値 1~6)。
これらを Excel で開くと、この列がハイフンで結ばれているために
「日付と認識」されてしまい、1-2 の場合は 1月2日 という具合に
自動的に変換されて表示してしまいます。
これを自動変換させない方法はありますでしょうか?
該当データのトップに予め「'(アポストロフィー)」を付けて、文字列
として判断させようと試みたのですが、この方法だと、確かに日付変換
はされませんでしたが、アポストロフィーもそのまま表示されてしまい格好
が悪いです。「'1-2」といった具合です。
解決方法を教えてくださる方、宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

CSVファイルを単純に開くと、エクセルが勝手にデータ形式を判断してしまい、困ることがあります。

2つ方法を書きます

1)CSVファイルの拡張子をTXTに変更してエクセルの「ファイル」→「開く」で開く

2)「データ」→「外部データの取り込み」→「データの取り込み」からCSVファイルを開く

どちらの方法もデータ取り込みのウィザードが立ち上がります。
この中で各列のデータ形式を指定する画面がありますから、クラスの列は「文字列」を指定してください
    • good
    • 5
この回答へのお礼

ありがとうございます。
解決しました。

お礼日時:2009/05/18 21:35

長々質問に書かなくても、有名な(質問が多い)問題。


データー外部データの取り込みー(略)-テキストファイルウイザード3/3
の画面で列(項目)ごとに書式を指定できる。
「データのプレビュー」のところで、項目(列)をクリックして(黒い背景になる)、右上部の「列のデータ形式」で「例えば「日付」を指定して仕舞い。
    • good
    • 3
この回答へのお礼

ありがとうございます。
解決しました。

お礼日時:2009/05/18 21:37

元のデータを全く変えずにexcelで読む必要が出来る度にいちいち


処理するのであれば、zap35さんの回答通りウィザードを経由して
列ごとにデータ形式を明示する方法が唯一の解ですね。

しかし、元々は「学年」と「クラス」という、2つの異なる属性の
データを安易にハイフンで結んで一つにまとめようとしたのが原因
ですから、ちゃんと2列に出力しておけば何の問題もなかったのだ
と指摘しておきます。

ついでに、先頭にシングルクォーテーションってのはよく紹介され
る手口ですが、ご自分でも経験された通りcsvなどの読み込みとは
相性が悪いです。一度セルを選択して編集状態にし確定しないと、
シングルクォーテーションが隠れませんね。そこで、「="1-2"」と
いう形式を試してみてください。開く人に手間をかけさせられない
上に2列に分けると文句を言われる、なんて場合に有効です。
    • good
    • 1
この回答へのお礼

ありがとうございます。
解決しました。

お礼日時:2009/05/18 21:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel(csv) で入力した文字が日付になってしまいます。

Excel(csv)で住所を管理しています。
一つのセルに1-1-1のように入力をし、
次回そのファイルを開くと2001/1/1と表示され、
セルの書式設定の表示形式をみると日付になっています。

文字列にしてみても、36892というような
数字にしかならず、元の打ったデータがなんだったか
わからなくなってしまいます。

なんとかこの現象を回避する方法はありますでしょうか?
よろしくお願いします。

Aベストアンサー

ファイル→開くからではなくて、
データ→外部データの取り込み→テキストファイルのインポート
でテキストファイルを開いてやると、ウィザードの3番目で列ごとに書式設定ができますので、そこで番地の入っている列のデータ形式を文字列にすればOKです。

QExcelで入力文字を自動変換しないようにしたい

エクセルで自動変換しないようにしたいです。たとえば、「2011-02-09」と入力すると自動的に「2011/2/9」と変換されますが、この機能を完全にオフにしたいのですが、設定方法をご存知の方いらっしゃいませんか?

セルの冒頭に毎回「'」を入力したり、入力後にセルを選択して「セルの書式設定」で変更するのではなくて、最初から変換しないようにしたいのです。

「ファイル」-「オプション」でそれらしきものを探したのですが、見当たりませんでした。

この機能をオフにすることは、不可能なのでしょうか?

よろしくお願いします。

Aベストアンサー

例えば、セルの書式設定 → 表示形式 → 文字列
とすると、日付の形式になることはありません。

また、ユーザー定義で「0000"-"00"-"00」と作成すると
ハイフンなしの入力で、数値を8ケタ入力したものを
自動でハイフン付きの表示にすることも可能です。

どちらが使いやすいかは、質問者の方の利用の仕方にも
よりますので、一度試してみてください。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel VBAでCSVファイルを読込むと何故か文字列が日付に変換さ

Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換されて困っています。
すごく困っております。どなたか教えて下さい。

状況を申し上げますと、以下のようなCSVデータがあります。
"住所1","住所2"
"東京都港区青山","1-24-11"

このとき、別なCSVにデータを移すという単純なものです。

通常は、
WsCount.Cells(1, 1).Value =Cells(2,1).value
WsCount.Cells(1, 2).Value =Cells(2,2).value
で、セルにある文字をそのまま、新しいシートのセルに移すだけのことですが、
何故か、"1-24-11"が日付に変換され、"2011/1/24"に変わってしまいます。
デバックなどで、途中経過を見ても既に日付にかわっており、
どうにも対応ができません。

以前は""で囲んである文字は、文字のまま認識していたと思いますが、
何故か今回はうまくいきません。

ちなみに、Excel2007です。

どなたか、教えて下さい。

宜しくお願いします。

Aベストアンサー

ヒントです

Office2007で「データ」→「外部データの取り込み」→「テキストデータ」を選択すると、フィールド毎の取り込みの型を指定できます(文字列型にすれば日付型には変換されません)

この操作を「マクロ記録」してみてください。こんなマクロが生成されます。

Sub Macro1()
'
' Macro1 Macro
'
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\Temp\sample.csv", _
Destination:=Range("$A$1"))
.Name = "sample"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

あとはいらない行を削除してできあがり。削除しなくても一応は動くはずですけど。

ヒントです

Office2007で「データ」→「外部データの取り込み」→「テキストデータ」を選択すると、フィールド毎の取り込みの型を指定できます(文字列型にすれば日付型には変換されません)

この操作を「マクロ記録」してみてください。こんなマクロが生成されます。

Sub Macro1()
'
' Macro1 Macro
'
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\Temp\sample.csv", _
Destination:=Range("$A$1"))
.Name = "sample"
.FieldNames = True
.RowNumbers = False
...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセルで、頭に0をつけて数字の桁を揃える方法

エクセルで、必ず5桁の数字を入れる列があるとします。
ところが、数値データとして最初に作っているので、0が頭になく桁が足りない場合があります。
任意文字として5桁の数字にしたいのですが、

何かいい方法はありませんでしょうか?

例)
A列 A列
50      00050
1000  ⇒  01000
11111    11111

どうぞよろしくお願いいたします。

Aベストアンサー

次の方法は如何でしょうか。
(1)表示だけで良いのならば、セルの書式設定→表示形式→ユーザ定義で00000を設定
(2)データとして必要ならば、空き列(仮にB列)B1に=TEXT(A1,"00000")を入力、下方向にコピー→B列をコピー→A列に形式を選択して貼り付けで「値」を選択→OK、B列を削除


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報