952 :
側近中の側近 ◆0351148456 :2008/08/23(土) 23:01:30
>>943 (っ´▽`)っ
「マクロの記録」で生成されたプログラムだと、
.selectが多くできるけど、これを無くすとかね。
range("A1").select
selection.value = 1
↓
range("A1").value = 1
953 :
側近中の側近 ◆0351148456 :2008/08/23(土) 23:20:09
>>948 (っ´▽`)っ ほ〜れほ〜れ☆
Range(Cells(7, 8), Cells(10, 8)).AutoFill Destination:=Range(Cells(7, 8), Cells(10 + j * 4, 8))
>>951 動的には変えませんが、数式はユーザに変えてもらうカスタマイズポイントです
955 :
側近中の側近 ◆0351148456 :2008/08/23(土) 23:30:25
>>954 (っ´▽`)っ
ほうほう。
じゃあ、セルに名前をつけて、それでアクセスするといいかも。
Range("C10").FormulaR1C1 = Range("C5").FormulaR1C1
これだと、C5ってなんだ?ってことになる。ソース上はわからない。
ワークシートのC5を見ればわかるけどね。
たとえば、セルC5に"カスタマイズSQL"という名前を付ければ
Range("C10").FormulaR1C1 = Range("カスタマイズSQL1").FormulaR1C1
と書くことができる。
ソース上もわかりやすくなってイイ!
>>934 の不安も払拭される。
セルの名前は「挿入」→「名前」→「定義」で設定できるよ☆
956 :
側近中の側近 ◆0351148456 :2008/08/23(土) 23:31:13
(っ´▽`)っ 間違えた☆ たとえば、セルC5に"カスタマイズSQL"という名前を付ければ Range("C10").FormulaR1C1 = Range("カスタマイズSQL").FormulaR1C1 と書くことができる。
957 :
948 :2008/08/23(土) 23:32:54
>>953 できた!サンキューです♪
胸のつっかえが取れました(o^-')b
Rangeじゃ駄目だったんですね。
これで次の勉強に進められます。
ありがとうございますヾ(o゚∀゚)ノ゛
VBAで課長の背骨をヘシ折る事は可能? あと、栗とか剥ける?VBAで。 ググッても全然HITしない。
ああ、できるよ。
>>956 ありがとう
一応名前付き範囲は知ってるよ
君はのりのりですごい親切だね
また今度教えてね
うぜーよ
>>959 うっそマジ?
じゃあ例えば
Sub 課長()
Dim 課長 As Integer
Dim ボディ As Boolean
Dim 吐血 As Integer
課長 = 1
吐血 = 101
Do Until 課長 = 吐血
If Cells(課長, 1) = "" Then
ボディ = True
課長 = 課長 + 1
End If
Loop
MsgBox "課長は吐血しました。もうやめて下さい。"
End Sub
とかで課長吐血する?VBAで吐血する?
そのコードじゃ無理だけどな
VBAでルーチン組んでから、椅子で殴れば良いじゃん。
ハードディスクのデータをクリーンにするプログラムを組んでプレゼントしなさい。
VBAでできるけどスレ違い。Excel関係ないから。
967 :
デフォルトの名無しさん :2008/08/24(日) 10:52:44
2003です。 マクロの記録からオートシェイプをやったけど そのまま実行すると塗りつぶし無しだけがキャンセルされてしまいます。 ActiveSheet.Shapes.AddShape(msoShapeOval, 257.25, 109.5, 39.75, 21.75).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Solid 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 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) どうすれば塗りつぶし無しに出来ますか?
968 :
側近中の側近 ◆0351148456 :2008/08/24(日) 11:07:37
>>967 (っ´▽`)っ
Selection.ShapeRange.Fill.Solid
を削除しましょう。
970 :
デフォルトの名無しさん :2008/08/24(日) 14:41:12
CSVファイルの数値を分析したいのですが フォルダ内すべてのCSVファイルにマクロを実行する方法はありますか? 紹介されている本やHPを教えていただけませんでしょうか? よろしくお願いします。
うーむ・・・CSVってカンマ区切りのデータテキストの事だよね? 一度EXCELに読み込んで処理じゃダメなのかな。
このスレ的にはそれがいいね。 どうやってやるかは、マクロ記録すればすぐ判ることだし。
excelで普通によみこむと、おもってるのと違う動きされることあるんだよなー。 だから、俺は、1行ずつ読み込み、コンマで区切りごとのデータを自前で配列にいれる 多バイト文字つかわれてたりするとこは、1フィールドごとにエンコードチェック、 をずっとEOFまでやってから、自分のおもってる型にかえてから処理しとる。
974 :
y :2008/08/24(日) 22:14:08
「フォルダ内すべての」CSVファイルに対して処理をしたい、 という点でもつまずいているのかも。それについては、 「FSO」を検索すると役立つ情報が見つかると思います。
CSVの定義って厳格な物ある?ファイル形式とか。 気になって調べたんだけど、ファイル形式までは規格されてないような。 んで、フォルダの中身全部、って指定がかなり難しいのではないかなと。 たとえば拡張子がtxtだとしても、それがCSVで組まれたデータファイルなのかは、 計算機で判断出来るの?って思ってさ。
RFC 4180
基本的に、顧客が好むのが、Excelでひらいたときにどうみえるか。 なんで、 "dataA", "dataB", ... , "dataX" みたいに、""でかこむことになる。 数値解析とかだけのローカル用途なら、囲まんけどな。
FSOの.Filesでファイル一覧取得して、Right$で.csvだったら、 FSOの.Readallで読み込んで、VBCRLFでSplitして、 配列に入れて配列をカンマで、Split
プロジェクトのこまごま作業で多かったのがFSOによる再帰ファイル検索だ
"abc,def","ghi","""" ってな感じのデータに対応しようと思ったら面倒よ、自前でやるのは
FSOでやるなら普通にGetExtensionNameでcsvかどうかを見ればいいんでね?
983 :
y :2008/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データは、シングルクォーテーション('')で囲まれたタイプのも
ざらにあるので意外と厄介ですよね。
Dir(fPath & "\*.csv", vbNormal) Ifはいらない
FSOとかつかうと 2008/08/25 20:27:30 みたいなフィールドがtextstream通した時点で 2008/08/25 20:27 とかされるからやめたほうがいいぞ。他にも罠多数。 どうしてもVBAっちゅーんなら、バイナリで読み込んで処理。これしかない。 自作のあるけど、バグあるとはずかしいから公開できん。 結構、考慮するべきパターンあるんで、かなり大きい。
986 :
側近中の側近 ◆0351148456 :2008/08/25(月) 20:47:47
(っ´▽`)っ もし作るのが業務ソフトウェアなら、許容するCSVの仕様ぐらい決めたら? こういう感じに。ちなみにこれはExcelのCSVの仕様に準じている。 ・カンマ区切り ・ダブルクォーテーション内のカンマは区切りとみなさない。 ・二連続のダブルクォーテーションは、文字としてのダブルクォーテーションと見なす。 (項目にダブルクォーテーションを含めたい場合には、ダブルクォーテーションを2つ打つこと) ・閉じていないダブルクォーテーションはエラー。 入出力は過剰だと思うぐらい明確にしたほうがいい。
987 :
側近中の側近 ◆0351148456 :2008/08/25(月) 20:50:39
(っ´▽`)っ
>>986 に追加。
項目にカンマを含めたければ、ダブルクォーテーションで項目を囲うこと。
(例:"1,000","12,000")
988 :
967 :2008/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で実現してくれるコードを教えてください。
マクロの自動記録でいいんじゃないの
CSV仕様きめても精確な実装はなかなかむずかしい。 もうほんと想定外の入力がされてたりする。 特に業務でよくあるのが複数行にわたって改行つきのコメントフィールドとか SJISとはかぎらんわけで、難しい。 もうこれでいいだろ、とおもうくらい慎重に実装しても、おれの技術じゃ 100万件のフィールドよむと、たいてい2,3件は、バグにかかる。 で、そっから、その特殊なケースをADHOCに直していくという対応。 例外でたからあとから3件追加しますとか、じゃ納得してくれんし、3年後に でるかもしれないわけで。。。ほんと怖いよ。 一番いいのは、EXCELでCSVをよみこむのはあきらめることじゃ。。。
991 :
967 :2008/08/25(月) 21:15:57
>>989 2007ではマクロの記録をしても、オートシェイプの挿入〜線種変更などをなにも記録してくれないのです。
992 :
側近中の側近 ◆0351148456 :2008/08/25(月) 21:16:40
>>991 (っ´▽`)っ
ウォッチウィンドウでそれっぽいプロパティを探せ☆
>>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
これで透明になるよ For Each sp In ActiveSheet.Shapes sp.Fill.Visible = msoFalse Next
995 :
デフォルトの名無しさん :2008/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ではどうやりますか?
うちはXMLに統一してるんでCSV時代のトラブルは一切無くなったな。
998 :
y :2008/08/25(月) 22:57:06
>>984 ありがとうございます。大文字・小文字を考えなくて済むのでますます楽です。
>>985 まさかそんな罠があるとは...。自分でも実験してみます。
999 :
デフォルトの名無しさん :2008/08/25(月) 22:59:46
ume
1000 :
デフォルトの名無しさん :2008/08/25(月) 23:01:54
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。