Excel VBA質問スレ Part7at TECH
Excel VBA質問スレ Part7 - 暇つぶし2ch981:デフォルトの名無しさん
08/08/25 00:14:27
"abc,def","ghi",""""
ってな感じのデータに対応しようと思ったら面倒よ、自前でやるのは

982:デフォルトの名無しさん
08/08/25 02:00:47
FSOでやるなら普通にGetExtensionNameでcsvかどうかを見ればいいんでね?

983:y
08/08/25 19:17:14
>>976
あ、そっちの方が簡単かも...
オブジェクト作らないで済みますし。

Const fPath = "(フォルダのパス)"
Dim fName As String
fName = Dir(fPath, vbNormal)
Do While fName <> ""
 If UCase(fName) Like "*.CSV" Then
  'Open ~
  '>>979の後半みたいな処理
  'Close ~
 End If
 fName = Dir
Loop

こんなやり方でいいのかな。
CSVデータは、シングルクォーテーション('')で囲まれたタイプのも
ざらにあるので意外と厄介ですよね。

984:デフォルトの名無しさん
08/08/25 20:21:21
Dir(fPath & "\*.csv", vbNormal)
Ifはいらない

985:デフォルトの名無しさん
08/08/25 20:28:40
FSOとかつかうと
2008/08/25 20:27:30
みたいなフィールドがtextstream通した時点で
2008/08/25 20:27
とかされるからやめたほうがいいぞ。他にも罠多数。

どうしてもVBAっちゅーんなら、バイナリで読み込んで処理。これしかない。
自作のあるけど、バグあるとはずかしいから公開できん。
結構、考慮するべきパターンあるんで、かなり大きい。

986:側近中の側近 ◆0351148456
08/08/25 20:47:47
(っ´▽`)っ
もし作るのが業務ソフトウェアなら、許容するCSVの仕様ぐらい決めたら?
こういう感じに。ちなみにこれはExcelのCSVの仕様に準じている。

・カンマ区切り
・ダブルクォーテーション内のカンマは区切りとみなさない。
・二連続のダブルクォーテーションは、文字としてのダブルクォーテーションと見なす。
(項目にダブルクォーテーションを含めたい場合には、ダブルクォーテーションを2つ打つこと)
・閉じていないダブルクォーテーションはエラー。

入出力は過剰だと思うぐらい明確にしたほうがいい。

987:側近中の側近 ◆0351148456
08/08/25 20:50:39
(っ´▽`)っ
>>986に追加。

項目にカンマを含めたければ、ダブルクォーテーションで項目を囲うこと。
(例:"1,000","12,000")

988:967
08/08/25 20:52:23
ActiveSheet.Shapes.AddShape(msoShapeOval, 257.25, 109.5, 39.75, 21.75).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 1.5
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64

これで2003でうまく塗り潰しの無い輪っかが描けたので
会社の2007に組み込んだんだけど、今度は黒塗り潰しに化けてしまいました・・・・
急遽マクロの記録で輪っかを描いてみたものの、なんと2007では図の挿入あたりの記録はしてくれないようです・・・。
互換性が無いのもむかつくが、マクロ記録も改悪されてるとは実に情けない話と思います。

どなたか、黒丸で中塗り潰しの無い輪っかを2007で実現してくれるコードを教えてください。

989:デフォルトの名無しさん
08/08/25 21:04:19
マクロの自動記録でいいんじゃないの

990:デフォルトの名無しさん
08/08/25 21:10:10
CSV仕様きめても精確な実装はなかなかむずかしい。
もうほんと想定外の入力がされてたりする。

特に業務でよくあるのが複数行にわたって改行つきのコメントフィールドとか
SJISとはかぎらんわけで、難しい。

もうこれでいいだろ、とおもうくらい慎重に実装しても、おれの技術じゃ
100万件のフィールドよむと、たいてい2,3件は、バグにかかる。
で、そっから、その特殊なケースをADHOCに直していくという対応。
例外でたからあとから3件追加しますとか、じゃ納得してくれんし、3年後に
でるかもしれないわけで。。。ほんと怖いよ。

一番いいのは、EXCELでCSVをよみこむのはあきらめることじゃ。。。


991:967
08/08/25 21:15:57
>>989
2007ではマクロの記録をしても、オートシェイプの挿入~線種変更などをなにも記録してくれないのです。

992:側近中の側近 ◆0351148456
08/08/25 21:16:40
>>991
(っ´▽`)っ
ウォッチウィンドウでそれっぽいプロパティを探せ☆

993:デフォルトの名無しさん
08/08/25 21:54:19
>>991
2007で普通に記録できたよ。
ついでに貼っておきますね。

ActiveSheetのオートシェイプを赤にするコード。

Dim sp As Shape
For Each sp In ActiveSheet.Shapes
With sp
sp.Fill.Visible = msoTrue
sp.Fill.Solid
sp.Fill.ForeColor.SchemeColor = 10
sp.Fill.Transparency = 0#
sp.Line.Weight = 0.75
sp.Line.DashStyle = msoLineSolid
sp.Line.Style = msoLineSingle
sp.Line.Transparency = 0#
sp.Line.Visible = msoTrue
sp.Line.ForeColor.SchemeColor = 64
sp.Line.BackColor.RGB = RGB(255, 255, 255)
End With
Next



994:デフォルトの名無しさん
08/08/25 22:03:21
これで透明になるよ
For Each sp In ActiveSheet.Shapes
sp.Fill.Visible = msoFalse
Next


995:デフォルトの名無しさん
08/08/25 22:44:49
999-9999-9999や9999-99-9999の書式で入力された電話番号を
(999)-9999-9999や(9999)-99-9999の書式にしたいのですが
A=Range("A1").Value
B=Find("-",A,1) -の位置
C=Left(A,B-1)    -の前だけ抽出
D=Mid(A,B,Len(A)-B+1) -の後ろを抽出

求める文字列="(" & C & ")" & D

関数だとこんな感じだけど、VBAではどうやりますか?



996:デフォルトの名無しさん
08/08/25 22:45:45
うちはXMLに統一してるんでCSV時代のトラブルは一切無くなったな。

997:デフォルトの名無しさん
08/08/25 22:46:41
>>995
InStr

998:y
08/08/25 22:57:06
>>984
ありがとうございます。大文字・小文字を考えなくて済むのでますます楽です。

>>985
まさかそんな罠があるとは...。自分でも実験してみます。

999:デフォルトの名無しさん
08/08/25 22:59:46
ume

1000:デフォルトの名無しさん
08/08/25 23:01:54
1000

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch