Excel VBA 質問スレ Part28

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ExcelのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Applications』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

前スレ:Excel VBA 質問スレ Part27
http://toro.2ch.net/test/read.cgi/tech/1353842387/
2デフォルトの名無しさん:2013/01/31(木) 13:46:36.87
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
3デフォルトの名無しさん:2013/01/31(木) 14:22:09.42
パイパンは前スレの変数定義の場所についてちゃんと答えようねw
4デフォルトの名無しさん:2013/01/31(木) 16:50:10.16
>>1

>>3 しつこい
5デフォルトの名無しさん:2013/01/31(木) 23:44:53.26
桃白白は童貞
6デフォルトの名無しさん:2013/02/01(金) 00:56:05.12
>>1

白桃は★5を100回熟読するまでレスしちゃ駄目ね
7デフォルトの名無しさん:2013/02/01(金) 01:52:09.89
>>3
こいつは馬鹿
8デフォルトの名無しさん:2013/02/01(金) 05:47:52.67
>>7
よう、パイパンw
9デフォルトの名無しさん:2013/02/02(土) 09:01:42.69
ここにいる連中は無職なので、
このスレを読んだら無職菌が感染します。
10デフォルトの名無しさん:2013/02/02(土) 14:20:42.84
まんこ大好き
11デフォルトの名無しさん:2013/02/02(土) 18:30:53.26
>>1
糞スレ立ててんじゃねえよ カス
12デフォルトの名無しさん:2013/02/02(土) 21:27:11.23
>>1
おつ
13デフォルトの名無しさん:2013/02/02(土) 23:25:38.38
まんこぺろぺろ
14デフォルトの名無しさん:2013/02/03(日) 04:17:22.55
おまんまんぺろぺろ
15デフォルトの名無しさん:2013/02/03(日) 07:45:53.13
無職はフーゾク行けないね
16デフォルトの名無しさん:2013/02/03(日) 10:47:21.23
omanko
17デフォルトの名無しさん:2013/02/03(日) 13:17:40.51
For Each c In Range(Cells(1, 2), Cells(40, r))
  If c = 10 Or 15 Then c.Interior.ColorIndex = 46
Next c
これだとすべてのセルに色がついてしまうのですが
10か15なら色をつけるにはどうしたらいいですか
18デフォルトの名無しさん:2013/02/03(日) 13:19:10.45
  If c = 10 Or c = 15 Then c.Interior.ColorIndex = 46
19デフォルトの名無しさん:2013/02/03(日) 14:27:14.84
ありがとうございます!
20デフォルトの名無しさん:2013/02/05(火) 16:59:48.32
Windows Media Playerを起動させて動画を再生したいです。
strKeyWordに動画のフルパスを格納しています。
Shell ("C:\Program Files\Windows Media Player\wmplayer.exe & strKeyWord")
でやるとMedia Playerは起動するが再生されません
Shell ("C:\Program Files\Windows Media Player\wmplayer.exe/play & strKeyWord")
でやると”実行時エラー 53" ファイルが見つかりません。になります。
どうしたらMedia PLayerの起動と同時に再生がはじまりますか?
21デフォルトの名無しさん:2013/02/05(火) 17:02:55.85
>>20
mediaplayerとか全然しらんけど、最低でも
Shell ("C:\Program Files\Windows Media Player\wmplayer.exe /play " & strKeyWord)
とすることが必要だと思われる。
ひょっとしたら
Shell ("C:\Program Files\Windows Media Player\wmplayer.exe /play """ & strKeyWord & """")
とする必要があるかもしれない。
22デフォルトの名無しさん:2013/02/05(火) 17:11:16.76
>>21
即レスありがとうございます。
どちらでも行けました。
23デフォルトの名無しさん:2013/02/09(土) 06:27:11.90
いわゆるUsedRangeの長方形内で
まったく値の入っていない行や列があれば
そのEntireColumnやEntireRowをきれいさっぱり削除したいんですが
強引にやればコードは書けそうですが
一番キレいで清らかな美しいコードはどうなりますか?
24デフォルトの名無しさん:2013/02/09(土) 07:36:41.77
パイパイン臭がする。
25デフォルトの名無しさん:2013/02/09(土) 11:23:02.32
>>23
実行結果上問題なければ、あとの自己満足の上での最適化は自分でやれ
26デフォルトの名無しさん:2013/02/09(土) 16:00:25.05
すみません、質問させてください。
今オートフィルのマクロを作ろうとしています。下コード
Cells(1, 4).AutoFill Range(Cells(1, 4), Cells(50, 4)), xlFillSeries
Cells(1, 5).AutoFill Range(Cells(1, 5), Cells(50, 5)), xlFillSeries
Cells(1, 6).AutoFill Range(Cells(1, 6), Cells(50, 6)), xlFillSeries
これをもっと簡潔にできる方法とかありますでしょうか。
27デフォルトの名無しさん:2013/02/09(土) 16:25:04.94
>>26
For
28デフォルトの名無しさん:2013/02/09(土) 16:35:58.13
>>26
for next で調べてみてくれや。

for j = 1 to 3
Cells(1, 3+j).AutoFill Range(Cells(1, 3+j), Cells(50, 3+j)), xlFillSeries
next

こんな感じでいいんじゃないかな?
半年ぶりVBAだから少し不安。素人です。
29デフォルトの名無しさん:2013/02/09(土) 17:30:48.62
>>27-28
forか!盲点でした。ありがとうございます。
30デフォルトの名無しさん:2013/02/09(土) 18:06:29.50
繰り返しの処理で for が盲点だったのか
31デフォルトの名無しさん:2013/02/09(土) 18:06:43.52
プログラム的にはforで回せってのは間違ってないと思うが
Range(Cells(1, 4), Cells(1, 6)).AutoFill Range(Cells(1, 4), Cells(50, 6)), xlFillSeries
じゃダメなのかと
32デフォルトの名無しさん:2013/02/09(土) 20:51:57.28
>>31に一票
33デフォルトの名無しさん:2013/02/10(日) 01:04:29.90
>>30
forは多様しているのにも関わらずです、、、

>>31-32
そうゆう形のを期待してました!
アドバイス有難うございます。
34デフォルトの名無しさん:2013/02/10(日) 01:22:34.61
と思いきや、よく見たらそれは試していましたorz
実際は数字の50のところに変数を入れていて、
>>31のだと50の所に変数を入れているのが原因らしく、エラーが出てしまいました。
分かりづらい質問の仕方ですみません。しばらくはforで代用しておくことにします。
35デフォルトの名無しさん:2013/02/10(日) 01:52:21.21
>>34
変数かどうかは関係ない
可能性としては、その変数に0とかマイナスとか使えない数字が入ってる
36ななし:2013/02/10(日) 02:49:08.50
>>34

col_start = 4
col_end = 6
row_start = 1
row_end = 50
Range(Cells(row_start, col_start), Cells(row_start, col_end)).AutoFill Range(Cells(row_start, col_start), Cells(row_end, col_end)), xlFillSeries

何の問題もない
3723:2013/02/10(日) 13:11:16.30
>>25
いえ自分ではまだコードは完成してなんです。

どなたか、いわゆるUsedRangeの長方形内で
まったく値の入っていない行や列があれば
そのEntireColumnやEntireRowをきれいさっぱり削除したいんですが
強引にやればコードは書けそうですが
一番キレいで清らかな美しいコードはどうなりますか?
38デフォルトの名無しさん:2013/02/10(日) 13:43:29.92
>>34
r = "D1:F1"
n = 50
Range(r).AutoFill Range(r).Resize(n), xlFillSeries
39デフォルトの名無しさん:2013/02/10(日) 14:28:34.81
>>37
まずはその強引なコードを作って見せてよ
一番きれいなコードは書けないけど
素人の書いた汚いコードの批判なら俺にも出来るからさwww
40デフォルトの名無しさん:2013/02/10(日) 14:50:23.89
>>37
まずは「美しい」の定義を文章で書け
話はそれからだ
41デフォルトの名無しさん:2013/02/10(日) 14:51:21.67
どんなプログラムを見せても批判するつもりなんだろうな
42デフォルトの名無しさん:2013/02/10(日) 14:52:49.31
インデントの付け方が美しい、でもええんか?
文字の色が美しい、でもええんか?VBEでは文字色は変更できんけど
43デフォルトの名無しさん:2013/02/10(日) 14:57:59.35
文字色変更できなかった?
変数は青とか種別ごとだけど
4423:2013/02/10(日) 15:04:05.17
わたしの強引なコード言葉で説明しましょう。
UsedRangeのRow x Columnを
そのまま二次元配列にします。
その値は、セルに入ってる値の文字の長さ(Len関数)です。
そして各列、各行をうしろから見ていき
その各列または各行の配列変数の絶対値の値が0ならばすべて空欄と判断し
その行または列を削除します。
4523:2013/02/10(日) 15:04:41.76
誤 絶対値の値

正 絶対値の和
46桃白白:2013/02/10(日) 15:37:55.62
>>37
https://friendpaste.com/wLe15LuZlL0MRrAZX10Eg

桃白白は水樹奈々の純潔パラドックスっていう曲をヘッドホンで爆音で聴きながら
のりのりでコード書いてるんだけどさ、そうして書かれたコードが純潔であることに異論はないっしょ。
じゃあ桃白白のコードがもっとも清く美しいということでいいな。
4723:2013/02/10(日) 15:43:28.62
>>46
カンニングする時点でキミは0点だ。
さらにそのコードは長すぎる。
長すぎるよ。
5行くらいか、あるいは長くても10行くらいで。
別にツウぶらなくてもいいんだよ。
さあやりなおし。
48デフォルトの名無しさん:2013/02/10(日) 15:47:17.23
VBAでこんなことできませんか?
まず普通のシートのある範囲を選択していてコピーしている状態。
それでフィルターがかかってる別シートのある1つのセルがActiveになってる

ここでマクロ実行。

そしたら、普通のシートのコピーした範囲が、フィルターがかかったシートへ、値がコピペされるの。
もちろんコピペは非表示セルは無視するの。
これ通常の操作でコピペすると、Excelに慣れた人は「ああ、あのやっかいなやつか」とピンとくると思うけど、非表示セルに対してコピペされてしまう。
49桃白白:2013/02/10(日) 16:00:28.57
>>47
誰が何をカンニングなのかよくわかんないけど、いつから自分が採点者だって錯覚してた?
いいか、このスレでもっとも清純でくもりなきまなこを所有しているのは桃白白だ。
お前の濁った瞳で清濁を判別できると思ったらおおまちがいだ。だれもがこころ奪われる
美しい風景が眼前に広がっていたとしても、すりガラス越しにみたらとても白いです
という感想しかいえないだろ。お前の眼はそういう眼であるけれども、
桃白白のクリスタルアイを持ってすれば明確に青く澄んだ空の色を認識できるわけ。
つまり桃白白が返信した時点で採点する権利は桃白白に委譲されたわけ。
50デフォルトの名無しさん:2013/02/10(日) 17:27:31.80
幼稚なコードでも、スレに貼らずにああいうところに投稿されると
パッと見では良くできたコードに見えてしまうから不思議だ
パッと見だけで、じっくり見れば結局幼稚なコードに違いないんだけどねw
51桃白白:2013/02/10(日) 17:56:16.96
>>50
     ∩___∩
     | ノ     ヽ
     /   ―   ―   べ、べつに桃白白じっくり見てもらえて書いたかいがあったなんて思ってないからな
     |  ////( _●_)ミ   幼稚といわれて怒り狂ってるからな
    彡、    |∪| l   テヘクマ
     ヽ    ヽノ /
     /´  ヽ、r ̄
     r  ヽ、  )
     ヽ、  ヽヽ
     と二_ノ_ノ
52デフォルトの名無しさん:2013/02/10(日) 18:01:31.50
最近、桃白白も弄られ慣れてきたな
以前は弄られるとキレてたが、自分の立ち位置を自覚し
そのレベルでは弄られるのも仕方ないということにようやく気付いたか
53デフォルトの名無しさん:2013/02/10(日) 18:10:36.96
パイパンのぱいぱいをいじるとかさあ・・・
VBAの話しようぜ・・・
54桃白白:2013/02/10(日) 18:23:19.63
>>53
やらしいサイテー
55デフォルトの名無しさん:2013/02/10(日) 19:19:17.40
1回しか使ってない変数がいくつもあるけど、まとめると読みにくくなるし
とりあえず空行を詰めるだけならこんな感じでいける

Sub Macro1()
  With ActiveSheet.UsedRange
    r1 = .Row
    c1 = .Column
    r2 = r1 + .Columns.Count - 1
    c2 = c1 + .Rows.Count - 1
  End With
  
  With Application.WorksheetFunction
    For i = r2 - 1 To r1 Step -1
      If .CountA(Rows(i)) = 0 Then Rows(i).Delete
    Next
    For i = c2 - 1 To c1 Step -1
      If .CountA(Columns(i)) = 0 Then Columns(i).Delete
    Next
  End With
End Sub
56デフォルトの名無しさん:2013/02/10(日) 19:22:43.25
バグというか、単純な書き間違い発見
    r2 = r1 + .Rows.Count - 1
    c2 = c1 + .Columns.Count - 1

Withを展開して無駄な代入を全部まとめれば6行になる
57桃白白:2013/02/10(日) 19:23:43.91
>>55
じゃあそっちを桃白白が書いたことにする?
58デフォルトの名無しさん:2013/02/10(日) 19:25:25.35
>>48
クリップボードから非表示の行は飛ばして張りつける

Set dst = Application.Selection
Set dataobj = New DataObject
dataobj.GetFromClipboard
clipstr = dataobj.GetText(1)
row = 0
For Each clipline In Split(clipstr, vbCrLf)
    Do While dst.Offset(row, 0).Rows(1).Hidden = True
        row = row + 1
    Loop
    col = 0
    For Each s In Split(clipline, vbTab)
        dst.Offset(row, col).Value = s
        col = col + 1
    Next
    row = row + 1
Next

いろいろチェックしないとダメだがまあこんな感じでどうだ
59デフォルトの名無しさん:2013/02/10(日) 19:27:41.53
よく考えたら、大して行が長くなるわけでもないのでまとめた

Sub Macro2()
  With ActiveSheet.UsedRange
    For i = .Row + .Rows.Count - 2 To .Row Step -1
      If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).Delete
    Next
    For i = .Column + .Columns.Count - w To .Column Step -1
      If Application.WorksheetFunction.CountA(Columns(i)) = 0 Then Columns(i).Delete
    Next
  End With
End Sub
60デフォルトの名無しさん:2013/02/10(日) 19:30:07.00
またタイプミスしてるよ… orz

Sub Macro2()
  With ActiveSheet.UsedRange
    For i = .Row + .Rows.Count - 2 To .Row Step -1
      If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).Delete
    Next
    For i = .Column + .Columns.Count - 2 To .Column Step -1
      If Application.WorksheetFunction.CountA(Columns(i)) = 0 Then Columns(i).Delete
    Next
  End With
End Sub
61デフォルトの名無しさん:2013/02/10(日) 19:32:45.69
罫線とか塗りつぶしとか、何か書式設定されてるとゴミが1行分だけ残るから
それを避けたいなら「- 2」の部分を「- 1」に変えてね
62デフォルトの名無しさん:2013/02/10(日) 20:00:54.01
Forステートメントで計算させるのか?
63デフォルトの名無しさん:2013/02/11(月) 04:01:05.60
ScreenUpdatingはFalseでやるべきだな
UsedRangeが巨大だと再描画が大規模になるし
64デフォルトの名無しさん:2013/02/11(月) 13:14:58.39
VBA初心者です。基本的なことで申し訳ないのですが、質問させてください。
今8枚目以降のシートを新規ブックに移動したく、選択する所まで以下のコードを作りました。

Dim i As Integer

If ActiveWorkbook.Worksheets.Count < 8 Then Exit Sub
For i = 8 To ActiveWorkbook.Worksheets.Count
Worksheets(i).Select (False)
Next i

この後、選択移動をしたシートを移動するのですが、
色んなサイトを覗いては見たものの「Sheets(Array(1, 2, 3)).Move」等、
シート名やインデックス番号を指定するものばかりで、中々先に進めません。
選択しているシートを移動する、又は連続しているシートを移動する何か良いやり方はないでしょうか。
65デフォルトの名無しさん:2013/02/11(月) 13:45:23.91
>>64
selectedsheets
66デフォルトの名無しさん:2013/02/11(月) 14:04:27.99
>>65
お陰様で出来ました!有難うございました。
67デフォルトの名無しさん:2013/02/11(月) 16:44:25.93
ファイルの末尾の改行を削除したいのですが
どうすれば良いでしょうか?

AAA
BBB
[EOF]

↓ こーいう風に最終的にしたいです。

AAA
BBB[EOF]
68デフォルトの名無しさん:2013/02/11(月) 16:51:26.02
ファイルの末尾の改行が複数あったらどうするの?

AAA

[EOF]



AAA
[EOF]

それとも

AAA[EOF]
69デフォルトの名無しさん:2013/02/11(月) 16:54:16.29
ファイルの末尾の改行は、2つだけです。


AAA
BBB

[EOF]

というパターンはありえなくて、

AAA
BBB
[EOF]

のみあり得ます。
70デフォルトの名無しさん:2013/02/11(月) 16:56:44.15
1つだけじゃないの?
71デフォルトの名無しさん:2013/02/11(月) 17:05:46.49
ループすりゃいいじゃない
正規表現つかって末尾から
vbcrlfだったら一文字削除
それ以外の文字になるまで処理継続
72桃白白:2013/02/11(月) 18:13:09.76
>>67
桃白白全力のトリミング
https://friendpaste.com/h9ZhOXDbfGoGLPXqdqfNk
73デフォルトの名無しさん:2013/02/11(月) 18:18:38.12
>>69
最初から改行がない可能性は?
必ず最後は改行?
74デフォルトの名無しさん:2013/02/11(月) 18:30:38.31
書き捨てスクリプトのようなものなら
多少の決め打ちはいいんでないかい
75デフォルトの名無しさん:2013/02/11(月) 18:36:12.79
改行判定すりゃいいじゃ・・・
76デフォルトの名無しさん:2013/02/11(月) 19:08:08.48
最後が改行で終わらないテキストファイルなんか窓から投げすててしまえ
77デフォルトの名無しさん:2013/02/11(月) 19:12:48.14
桃白白って簡単な処理でも、とにかく冗長にコード組むのが好きだよね

冗長なコードしか書けないおバカさんなの?
それともコードを複雑にすることで背伸びしてるつもりなの?
78桃白白:2013/02/11(月) 19:20:15.29
>>77
それは桃白白より優れたコード書いてからゆってよ。
手術の執刀医に腹をかっさばかれながらなんでこんなに
時間がかかるんだといってるようなもんだよ。病院の先生は
一生懸命全力尽くしてるんだよ。たとえ患者が名のあるお医者さん
だったとしても患者として病院のお世話になるんならおとなしく
麻酔にかかってるのが礼儀ってもんだと思うよ。桃白白よりきれいなコード書けるの?
それとも桃白白よりきれいなコード書けないの?
79デフォルトの名無しさん:2013/02/11(月) 19:22:17.54
プログラマからすれば冗長なコードってのは褒め言葉なんだが・・・
パイパイ噛み付くところ間違ってる
80桃白白:2013/02/11(月) 19:32:51.13
>>79
冗長なコードしか書けないおバカさんなの?
それともコードを複雑にすることで背伸びしてるつもりなの?
お前はこう言われてうれしいのか?そうか。受け取り方はひとそれぞれだよな。
81デフォルトの名無しさん:2013/02/11(月) 19:47:33.24
Sub TrimEndCrLf(ByVal filepath As String)
  Dim stream As ADODB.stream
  Set stream = New ADODB.stream
  stream.Type = ADODB.adTypeBinary
  Call stream.Open
  Call stream.LoadFromFile(filepath)

  If stream.Size >= 1 Then
    Dim b As Byte
    stream.Position = stream.Size - 1
    b = stream.Read(1)(0)
    If b = 13 Or b = 10 Then
      If b = 13 Then
        stream.Position = stream.Position - 1
      ElseIf b = 10 Then
        If stream.Size >= 2 Then
          stream.Position = stream.Position - 2
          b = stream.Read(1)(0)
          If b = 13 Then
            stream.Position = stream.Position - 1
          End If
        Else
          stream.Position = stream.Position - 1
        End If
      End If
      Call stream.SetEOS
      Call stream.SaveToFile(filepath, ADODB.adSaveCreateOverWrite)
    End If
  End If

  Call stream.Close
End Sub
82デフォルトの名無しさん:2013/02/11(月) 19:50:28.48
Sub TrimEndCrLf(ByVal TextPath As String)
  Const NlCode = vbNewLine ' 改行の種類を設定

  Dim Fso As New FileSystemObject
  Dim TextSrc As String
  Dim Lines() As String
  TextSrc = Fso.OpenTextFile(TextPath, ForReading).ReadAll
  Lines = Split(TextSrc, NlCode)
  If Lines(UBound(Lines)) = "" Then ReDim Preserve Lines(UBound(Lines) - 1)
  Fso.CreateTextFile(TextPath, True).Write Join(Lines, NlCode)
End Sub
83デフォルトの名無しさん:2013/02/11(月) 19:52:35.37
空ファイルもあり得るなら
If FileLen(TextPath) = 0 Then Exit Sub
を追加

まあ
With Fso.OpenTextFile(TextPath, ForReading)
  If .AtEndOfLine Then Exit Sub
  TextSrc = .ReadAll
End With
でもいいけど
84デフォルトの名無しさん:2013/02/11(月) 20:49:17.34
不特定多数が使うプログラムと、特定個人や組織がつかうプログラムじゃ設計が異なるよな
85桃白白:2013/02/11(月) 21:25:35.35
>>82
ところで、話変わるんだけどさ、FSOのReadAllて読み込む文字列に
ヌル文字が含まれてるとメモリが破壊されることない?物理的にて
ことじゃなくて読み込む文字列が変にならない?桃白白それが
いやでFSOはあまり使わないわ。
86デフォルトの名無しさん:2013/02/11(月) 22:02:04.92
ヌル文字が入ってる段階でテキストとはいえない
87デフォルトの名無しさん:2013/02/11(月) 22:03:01.43
そんなこと一度もないが、仮に有ったとしても
一般的にはプレーンテキストでヌル文字含むことの方が例外的なものなんだから
ヌル文字含むテキストを扱う場合だけ対策すれば良いことだな

というかFSOではなくVBAの文字列操作関数の中には、ヌル文字が含まれると
想定外の動作するものがあるが、それをFSOのせいと勘違いしてるんじゃね?
ちゃんとデバッグして、ReadAllの時点で問題が発生してることを断定出来たの?
出来たなら、その断定方法を具体的に書いてみな
88デフォルトの名無しさん:2013/02/11(月) 23:19:25.60
readline.vbs

FileSystemObjectのReadLine()/ReadAll()関数には、
NUL文字に後続するデータがNUL文字に化けるという、重大障害があります。
そこで、ReadLine()/ReadAll()をRead()で代替します。

とあるな
89デフォルトの名無しさん:2013/02/12(火) 00:56:17.31
まあバイナリ用じゃなくてテキスト用だからな
90桃白白:2013/02/12(火) 02:31:07.01
>>86
テキストと呼ばなくてもテキストにヌル文字が入る可能性はあるわけで、
それいやじゃない?

>>87
そんなの例外だ問題ないといっちゃうわけ。じゃあエルシャダイの称号はお前のものだ。

>>89
ReadメソッドやADODBのReadTextは問題ないわけで、いやじゃない?ADODBのほうがよくない?
桃白白て魅力的じゃない?
91デフォルトの名無しさん:2013/02/12(火) 02:51:15.19
UTF16テキストならヌル入るでしょ
92デフォルトの名無しさん:2013/02/12(火) 03:29:09.25
> テキストと呼ばなくてもテキストにヌル文字が入る可能性はあるわけで
「可能性」ではなく「ケース」だね

確かにタブ区切りテキストみたいなかんじでヌル区切りテキストとかもあるけど
それはヌル区切りテキストなどの特殊なものを扱うケースにおいて考慮すれば良いことで
特殊な制御構造を持たない普通のテキストファイルに、不意にヌル文字が入る可能性は
ファイルが破損しない限り無い

例えるなら、関東では雪が積もることがあるからと、8月に沖縄から東京に車で来るのに当って
スタッドレスタイヤを付けてくるようなもの
確かに関東では雪が積もることは往々にしてあるが、それは冬、精々晩秋から初春というケースにおいてのみ
考慮すれば良いことで、8月にそれを考慮する必要性は全く無い

その辺の「可能性」と「ケース」の違いを理解して組まないと、どんどん無駄で冗長なコードになってしまう
93桃白白:2013/02/12(火) 03:52:03.66
>>92
無駄で冗長になるからヌル文字を考慮すべきじゃないということなら
FSOをADODBに変えるだけで対処できるわけで、冗長にならないからADODBを使うべきだよ。
それが無駄じゃないとわかるときっていうのは動作不良におちいったときでしょ。
いうなれば防具つけてくだけでいんだよ。相手が素手でくるだろうから俺は丸裸で構わない、
身軽なほうがいいと言ってでかけていって武装した敵に襲撃を受けるのはいやじゃない?
そのタイヤの例はわかるんだけどさ、石橋を叩いて渡る桃白白てことだよ。
94デフォルトの名無しさん:2013/02/12(火) 04:35:22.00
まだ桃白白には難しい話だったかな
95桃白白:2013/02/12(火) 04:48:39.44
>>94
>>92は原発事故を経験してないから安全だと言ってるだけだよ。
それ安全神話状態だよ。>>87はそんなことは一度もないと言ってて、
そんなことは読み込む文字列がヌル文字を含んでいることなのか、そのときに
ReadAllが変な値になることがあることなのか、どのことを言ってるのかは不明だけれども、
すくなくともReadAllが変な値になることがあるのを知らないんでしょ。知らないのに大丈夫だ
と言ってるだけだよ。それってとっても危ないことなんだよ。桃白白が言ってることだから
反対したくなってるだけで桃白白が言ってることが正論だってことはうすうす気づいてるでしょ。
じゃあうすうす桃白白に賛同すればいいよ。
96デフォルトの名無しさん:2013/02/12(火) 05:36:06.66
まあ桃白白が手を出す程度のプログラムなら、無駄なことやったって
たかが知れてるんだから、好きなだけ無駄なことやらせておけばいいじゃん

5000万の予算、1年の開発期間で、1億の売り上げを目標にしていたものが
2億の経費、3年の開発期間が掛かり、他者に先を越されたことで価値も下がって
売り上げも3000万になり、利益無しどころか億単位の損益になるってんじゃ放っとけないけどさ
97桃白白:2013/02/12(火) 05:55:53.70
>>96
FSOあぶないよって話をしたかったの。もうやめようかお前が何の話をしてんのかよくわかんなくなってきた。
98デフォルトの名無しさん:2013/02/12(火) 11:21:13.24
桃白白って最近"分"を弁えて素直になってきたが、相変わらず意地張り出すと止まらないなw
自分が間違ってたことに気付いても、きっと厨な性格が出てしまって引っ込みが付かないのだろう。
99デフォルトの名無しさん:2013/02/12(火) 11:44:44.68
マクロを使ってシート見出しの名前で、シートの順番を並べ替えるようなことってできますか?
A1X30101
A2X30115
B1X30210
のように文字数は9文字
末尾の数字は作成日2013/01/01から30101を生成
頭の2文字はデータソースの属性から決定(10種類程度)
3文字目のX部分はファイル毎に固定(同一ファイル内では同じ)
1ファイルに30以上のシートを保存している

A1Xで時系列>A2Xで時系列>・・・みたいに並べ替えたい
100デフォルトの名無しさん:2013/02/12(火) 12:18:05.38
>>99
できますよ
101デフォルトの名無しさん:2013/02/12(火) 12:21:07.07
ぜんぜんやり方が浮かばないです
102デフォルトの名無しさん:2013/02/12(火) 12:53:22.50
>>99
配列に格納した文字列のソートくらいは解ってると想定して
(解って無くてもググればすぐ解ることだし)
シート名を配列に書き出したらソートして
あとは配列(0)のシートを.Move Before:=Worksheets(1)にした後は
1〜最後までは配列(インデックス)のシートを.Move After:=Worksheets(インデックス)
にすれば良いだけだよ
103デフォルトの名無しさん:2013/02/12(火) 12:54:28.87
データソースの種類と順番がわからないけど、単純にシート名の文字列順と見ていいの?
104デフォルトの名無しさん:2013/02/12(火) 12:57:03.87
>>101
ワークシートを名前順に並べ直す

Sub Macro1()
  For i = 1 To Sheets.Count - 1
    flag = 0
    For j = 2 To Sheets.Count
      If Sheets(1).Name > Sheets(j).Name Then flag = j
    Next
    If flag > 0 Then Sheets(1).Move After:=Sheets(flag)
  Next
End Sub

シートの順番を変える時ってScreenUpdatingは効果あるんだっけ?
105桃白白:2013/02/12(火) 12:59:37.59
>>98
桃白白が間違ってたとこってどこ?
106桃白白:2013/02/12(火) 13:02:39.54
>>98
技術的な話をしてるときにそういう印象操作的な人格批判をするやつって桃白白だいきらいだわ。
お前は桃白白にきらわれて絶望しろ。
107デフォルトの名無しさん:2013/02/12(火) 16:12:26.23
>>102-104
できました!凄い!こんな簡単にできるんだ
有り難う!
108デフォルトの名無しさん:2013/02/12(火) 16:23:43.46
桃白白も知識はそこそこ付いてきたようだけど、論理的思考能力がまだまだだな
プログラムではこっちの方が重要なんだが勉強しても知識ほどの伸びは期待できないからなぁ
109デフォルトの名無しさん:2013/02/12(火) 21:25:12.78
すでに解決してるみたいだけど、>>104はもうちょっと短くならないのかな
うまい方法がありそうな気がする
110デフォルトの名無しさん:2013/02/12(火) 22:52:13.57
どう見ても桃白白の方が論理的なレスだな
桃白白さんすごいです。
111デフォルトの名無しさん:2013/02/12(火) 23:11:22.75
いくら見方が居ないからって、それやっちゃ終わりだぞ
112デフォルトの名無しさん:2013/02/12(火) 23:32:43.91
>>109
挿入ソート的にやってみた。これはMoveメソッドと相性が良いな。
Sub Macro1()
  For i = 2 To Sheets.Count
    For j = 1 To i - 1
      If Sheets(i).Name < Sheets(j).Name Then
        Sheets(i).Move Before:=Sheets(j)
        Exit For
      End If
    Next
  Next
End Sub
113デフォルトの名無しさん:2013/02/13(水) 01:17:13.78
VBAでのIE操作関係を網羅してるサイトってないんですかね?

ていうか、なんでこんなに説明が下手な人ばかりなんですか?
頭が悪い人って説明の仕方も下手ですよね。
相手に伝えなきゃ意味がないのに、自分しかわからないように説明するというか。
僕だったらもっと100%もっとうまく伝える自信があるんですけど。
114デフォルトの名無しさん:2013/02/13(水) 01:21:29.13
例えばここのブログ?
http://billboardtop100.net/excel/vba-ie/

Set ObjIE = CreateObject("InternetExplorer.Application") 'IEを開く際のお約束
 ObjIE.Visible = True 'IEを開く際のお約束
 ObjIE.Navigate "http://www.yahoo.co.jp/" '開きたいサイトのURLを指定

Set ObjIE
CreateObject
ObjIE.Visible
ObjIE.Navigate
それぞれ何を意味するかって説明をしないと、初めての人は理解できないだろう。
どうして頭が悪い人間は相手に伝える説明ができないんだ。
それぞれがどういう意味を成していて、どうして何のために入力するのか
それを説明できなければ話にならないのに、なんで独りよがりに自分だけがわかる説明書いてドヤ顔しているんだ。
プログラムよりまず日本語を勉強したらいいのに。
115デフォルトの名無しさん:2013/02/13(水) 01:27:02.12
例えば
>Set ObjIE = CreateObject("InternetExplorer.Application")

これ、ObjIEという文字列にCreateObject("InternetExplorer.Application")をセットする
このプログラム内ではObjIEという文字列はCreateObject("InternetExplorer.Application")を意味するってことでしょ?
じゃあさ

Set XXXXXXXX = CreateObject("InternetExplorer.Application")
XXXXXXXXはショートカットキーみたいなものです。自分が好きな文字列を入れてください。

こういう風に説明すればいいのに、どうして頭が悪い人はそれができないの?
なぜ?なぜできない?どうしてそんなに頭が悪い?

Set ObjIE

こういう風に書いちゃうと、まるでこれを入力しなきゃいけないみたいに勘違いしちゃうだろうが。
なんで融通がきく説明ができないの?
116デフォルトの名無しさん:2013/02/13(水) 01:32:55.89
>For Each Obj In ObjIE.document.getElementsByTagName("input")


これとかさ、こんな風に書いちゃったら

getElementsByTagName
For Each Obj In ObjIE
document
が何が何を意味してどういう働きをするか、まったくわけがわかんねーじゃねーか


For Each xxx In yyyyy.document.getElementsByTagName("mmmmm")

mmmmmがyyyyyをxxxにする構文

みたいになんでこういう応用がきく説明ができないのかって話。

どうしてこんなに頭が悪いんだよ?
IQどんだけ低いの?説明のセンスがないやつが説明しようとすんなよバカが。
117デフォルトの名無しさん:2013/02/13(水) 01:46:21.80
[お約束]という言葉を使うヤツの言うことは聞くな
そういうヤツは理解していない
118デフォルトの名無しさん:2013/02/13(水) 01:57:36.83
定期的に沸く痛い人
119デフォルトの名無しさん:2013/02/13(水) 02:03:01.38
例えばさ、英語習うときに

This is a pen. = これはペンです

こんな書き方したら、こう覚えちゃうだけでしょ?
そうじゃなくて、

This
is
a
pen

こうやって分解してそれぞれどういう意味で、主語なのか述語なのか、どういう使い方をするのか
そしてこの例文ではそれぞれどういう使い方をした結果、これはペンです という文になっているのか


ここまでで初めて説明になるんだろうが
バカなのかよ
なんでこういう賢い説明の仕方がわからないんだろう?
こんなバカな説明してたら、間違って覚えちゃって、余計わけわからなくなるだけなのに
なんでこういう賢いことできないのかなぁ?苦笑
120デフォルトの名無しさん:2013/02/13(水) 02:20:50.71
>>119
英語ネイティブな幼稚園児が主語とか述語(つか目的語な)とか意識してると思うか?
お前の頭が幼稚園児以下だから普通の人向けの説明が理解できなんだよ
121デフォルトの名無しさん:2013/02/13(水) 02:38:28.95
万人にゼロから説明しようとするととんでもなく冗長なことになる
だから説明する側としては相手にある程度のレベルを想定して説明する
これはweb上だけのことじゃなく学校の授業とかでも同じだろ

だから自分の理解を超える説明だなと思ったらもっと分かりやすいとこを探す
これもリテラシーの一つだと思うよ
122デフォルトの名無しさん:2013/02/13(水) 03:17:28.19
>>120
はい、言葉を使う人は皆意識してますね。
主語や述語がないと相手に言葉が伝わりませんから。
その証拠に、小学校で一番最初に習いますが?

おや?あなたの学校ではやらなかったのかな?教育制度が崩壊してたの?
あー、だから、説明の仕方もまともにままならないんですね?
そもそも主語や述語の使い方さえもわからないから?
123デフォルトの名無しさん:2013/02/13(水) 03:20:59.14
>>121
はい?通常は学校の授業も何の授業もそうしていますが?
あ い う え お
1 2 3 4 5 6 7 8 9 0
の書き方や意味から始まりますが?
え?あなたの学校ではいきなり、足し算も教えないで条件付き確率とか関数問題とかやってたんですか?
124デフォルトの名無しさん:2013/02/13(水) 03:29:49.15
おやおや、すごい人たちだなぁ、ここの皆さん^^
生まれた時から、周りの同年代が「オギャー」って言ってる時に
ニュートン力学や流体力学、宇宙物理や電磁気学の定理をペラペラペラペラ話してたんだ?^^
すごいねぇ^^さすが、なんでも知ってるマスター博士だね^^
世の中はどんな天才でも知らない事の方が多いのに、ここのマスター博士の皆は、なんでも知ってるんだもんね^^

じゃあ全ての生物の呼吸器学のすべてを論にして述べてみてよ^^
よろしくね博士^^
125デフォルトの名無しさん:2013/02/13(水) 04:18:31.00
「ママー」
「しっ!見ちゃいけません!」
126デフォルトの名無しさん:2013/02/13(水) 04:22:01.29
>>116
こういう説明してくれてる市販本教えてくれ。三流くんのサイトは横道な文章が多すぎる
127デフォルトの名無しさん:2013/02/13(水) 07:28:57.51
>>112
シートを移動対象にするのは時間が掛かりそう。
特にシートにデータがいっぱい格納されている場合とか。

シート名をセルに書き出してソートしてから移動するやり方の方が時間は掛からないような感じがするけど。
コードが短ければ処理が速いというものじゃないしね。

こんな感じかな。
・シート名格納用のシートを非表示で一枚目に作成しておく。
・シート名格納用のシートのデータをクリア。
・一番最初のシートにシート名をA列のセルに出力。
・シート名をソート
・シートをソート順に移動
128デフォルトの名無しさん:2013/02/13(水) 07:56:27.88
確かにね。なぜかは知らないがプログラムに関する質問で、的確な答えがかえってきたことは今まで一度もない。
質問してもどっかしら何かおかしくて、結局自分で解決しちゃうっていうパターンだないつも。
むしろ教えてもらったことが間違ってたり説明がいい加減なせいで、余計わからなくなるくらいだな。
129デフォルトの名無しさん:2013/02/13(水) 08:02:18.28
プログラミング関係者ってクセがある人が多いのかね?
・設定をこっちで用意してるのに、その設定を無視して勝手に設定を作ってプログラムを書いて答える人
・質問を無視して、こうすればいいんじゃない?といらないアドバイスをして質問には答えない人
・ヒントだけを与えて後は自分で考えろとドヤ顔で去っていく人

質問文を読まない人が多いのかな?
130デフォルトの名無しさん:2013/02/13(水) 08:27:45.49
白桃の発言はまだマシなほうやったんや
131デフォルトの名無しさん:2013/02/13(水) 08:40:54.08
昔はさ、ネットなんてなくてさ本だけが頼りで
隅から隅までじっくり読んで理解しようとしたものさ。
だが今はどうか。ネットで聞いたりぐぐったりできる。
だからどんどんバカになってるんだよ。
132デフォルトの名無しさん:2013/02/13(水) 08:47:05.17
>>129
設定をこっちで用意していると言っても、その背景の説明がないから勝手に設定を作られるんでしょ。
で、よくあるのは回答の後にいや実はこんな背景があってとか後出しの条件を突きつけられる。
回答した人間にとっては貴重な時間を割いて回答しているわけで、
回答してもまた条件を後出しされるんでしょ?やってられないよということになる。

このスレは宿題スレじゃないんだし回答はアドバイスやヒントで充分。
そうじゃないと質問者が全く考えなくなるからね。
どうしても答えのコードが欲しいというのであれば宿題スレのようなスレを立てればいい。

>>129>>1のテンプレを読んでるのかな?
133デフォルトの名無しさん:2013/02/13(水) 09:12:19.91
>>129
中と下は、質問者からしたら気に入らないこと、都合の悪いことかもしれないけど
一般常識的には間違った事じゃないよ

まず中だが、質問者は無知故に、不適切な手続きで処理を行おうとしているなら
より適した手続きで望む結果を出せる方法を紹介するのは普通のこと

そして下だが、これは>>1★5にも書いてある通り、このスレの基本方針だし
そもそも無料の掲示板で丸投げ質問して、丸貼りして動くコードを作ってもらおうって方がおかしい

つまりプログラミング関係者の中でも、とくに初心者(質問者)にクセがあるというか
常識のない人が多いってことだなw

俺も昔ここ(Part1桁のころ)で質問したことあるし、今でも他言語スレでは質問することあるが
API名とか、関連記事が引っかかりそうな検索ワードなどのヒントだけ貰ったら、お礼言って後は自分で調べるし
134デフォルトの名無しさん:2013/02/13(水) 09:39:34.22
要するに質問がクソだって事だな。
意に介すに値しない質問。
最初はよくあるしスルーしてもらえるが、
そのうち愚問として扱われるようになる。
かならないかは、あなたしだい。

パイパンのする質問は得てして愚問ではない気はする。
135デフォルトの名無しさん:2013/02/13(水) 09:40:28.03
濃厚なパイパイ臭
136デフォルトの名無しさん:2013/02/13(水) 10:00:05.11
Excelツールバーの罫線アイコン右の
@▼をクリックすると罫線メニュー窓が出ます
Aメニュー上端をドラッグするとツールバーから独立させられる
Bメニュー窓内に複数のコマンドボタンが配置されダイレクトに実行できる
Cダイレクト実行したコマンドがツールバー上のデフォルトコマンドになる
Dメニュー上右端の×をクリックするとメニュー窓が消える

メニュー窓内に自作のマクロボタンを配置して
上記@〜Cと同じことをさせるにはどうすればよいでしょうか?
但し、「新しいメニューコマンド」は使わない方法で
137デフォルトの名無しさん:2013/02/13(水) 10:52:54.71
>>104まともに動かないんだけど
こうでないか?

Sub Macro1()
  For i = Sheets.Count - 1 To 1 Step -1
    flag = 0
    For j = 2 To Sheets.Count
      If Sheets(i).Name > Sheets(j).Name Then flag = j
    Next
    If flag > 0 Then Sheets(i).Move After:=Sheets(flag)
  Next
End Sub
138デフォルトの名無しさん:2013/02/13(水) 10:57:44.11
>>127
問題はソートじゃなくて移動の方だよ
>>104にしたって、シートがn枚の時、Moveメソッドが呼ばれる回数は最大でもn-1回だから

たとえばシートの初期状態が2-3-1となっていた場合、
先頭からチェックしてまず2を移動すると3-1-2になる。次に3を移動して1-2-3となって完了、だと2回Moveが必要だけど
いきなり1を先頭に移動すれば1回のMoveで並べ替えが完了する

どういう順番で動かすとMoveが最小になるか、見つけるのはけっこう大変。そういう意味での最適化が必要
139デフォルトの名無しさん:2013/02/13(水) 11:11:32.05
たかがエクセルマクロなんだから動けばいいじゃないか
細かい事気にしてる間に手作業で済んでしまうぞ?
140デフォルトの名無しさん:2013/02/13(水) 13:06:10.10
それが解ってない奴が結構多いんだよね
桃白白もそれ理解して無くて、この間グダグダ言ってたし

バグが無いようにするのは大事だが、無駄な最適化や無駄な例外処理はやめようぜ
141デフォルトの名無しさん:2013/02/13(水) 13:12:07.46
5分で書いて、実行時間十秒
1時間書けて華麗なコードを書いて、実行時間0.1秒

なんでもかんでも下を選ぶアホ大杉
142デフォルトの名無しさん:2013/02/13(水) 13:51:13.90
>>141
実行時間は短い方がいいんじゃね?
書くのは一回だけど、使うのは頻繁なんだから
143桃白白:2013/02/13(水) 14:04:01.34
>>140
どの件?
いちいち桃白白の名前だされるのは桃白白迷惑に思ってる。
桃白白にトラウマでもあるの?やめて。技術論語れないやつは桃白白きらい。
144デフォルトの名無しさん:2013/02/13(水) 14:17:37.17
>>142
55分かけて実行時間を9.9秒縮めた方がいい場合もあるのは当然のこと

いつでも
> 1時間書けて華麗なコードを書いて、実行時間0.1秒
がいいと思ってる奴大杉という話だ
145デフォルトの名無しさん:2013/02/13(水) 16:03:57.20
初めて直面する課題なら頭を使う、時間もかける
そうすれば経験値が上がって、次からはもっと効率化できる

そういう積み重ねは大事
146デフォルトの名無しさん:2013/02/13(水) 16:25:08.00
技術書執筆するときに全部丸々書くのか、ポイント絞って書くのかってことじゃね

あと名前言われるの嫌なら匿名掲示板でコテ着けんなっていう
なんでタオパイパイなの?
147デフォルトの名無しさん:2013/02/13(水) 16:29:35.17
>>144
捨てコードとして書いたつもりが、いつの間にかスタンダードにされたり、
一部の人しか使用しないと思っていたらいろんな人に使われたりする。
捨てコードとして書くとリスクが大きすぎる。

本筋のところさえきちんと考えられていれば修正も少ない。
捨てコードにすると結局余計な時間がとられたりするもの。
148デフォルトの名無しさん:2013/02/13(水) 16:36:02.03
捨てコードとして書いたんなら捨てろよってことだな
149桃白白:2013/02/13(水) 16:39:04.43
>>146
> 桃白白もそれ理解して無くて、この間グダグダ言ってたし

まともな話ならいんだけどやってることはこれだよ。こんな聞こえよがしの言い方で
桃白白の印象を悪くしようとしているだけの女々しいことしかできないぶんざいで
桃白白の名前を出すなってこと。

桃白白ってとても賢くてすごくかわいい人だと思うという文脈だったら
桃白白の名前を使ってくれてもかまわない。桃白白はそれをさまたげない。
150デフォルトの名無しさん:2013/02/13(水) 16:42:40.72
パイパイ女なのか?
151桃白白:2013/02/13(水) 16:46:29.79
>>150
前スレで画像貼ったんだけど、桃白白は山口智子にそっくりの超絶美人。
http://img64.pp.sohu.com/images/blog/2007/3/15/1/10/111e83e339c.jpg
似てるっしょ?ほれちゃうっしょ?ほれてくれてもいいよ。桃白白はそれをさまたげない。
152デフォルトの名無しさん:2013/02/13(水) 16:48:43.69
>>147
えっ?お前が書くコードは全部誰かに監視されてるのか?
捨てコードとして書いたんなら、捨てるか秘匿するかしとけよ
153デフォルトの名無しさん:2013/02/13(水) 16:51:34.90
掲示板に貼るコードは誰かが再利用する危険性が常にあるから
あんまりひどいコードを公開するのはなあ
154桃白白:2013/02/13(水) 16:55:23.93
>>153
別に問題ないだろ、利用するやつは2才児じゃあるまいし。
コード書くやつは利用するやつの保護者じゃあるまいし。
そんなことは知ったことじゃないだろ。
155デフォルトの名無しさん:2013/02/13(水) 16:56:08.07
>>151
こんな自分の写真も出せないクセに、他人の画像使って印象を良くしようとしてるだけの
陰湿なキモオタなんてお呼びじゃないよ
156デフォルトの名無しさん:2013/02/13(水) 16:57:08.76
誰だよ
157デフォルトの名無しさん:2013/02/13(水) 16:59:25.41
総合すると、山口智子似のキモヲタか。
微妙だな
158桃白白:2013/02/13(水) 16:59:47.14
>>155
嫉妬おつ。
159デフォルトの名無しさん:2013/02/13(水) 17:40:51.90
自分の写真出せない様な奴に、どうやって嫉妬したら良いのか教えてください
私にはどうやっても嫉妬できません
160デフォルトの名無しさん:2013/02/13(水) 18:28:27.73
どうしても気になるから思いきって聞く
やっぱり桃のようなオッパイだから桃白白なのか?
161デフォルトの名無しさん:2013/02/13(水) 20:16:57.75
俺は白白きらいじゃないよ
162デフォルトの名無しさん:2013/02/13(水) 21:32:25.03
変数とかみたいにこれをプログラムをショートカットする方法ってありますか?

自分が今書いてるプログラム文では何度も

Do While ie.Busy Or (ie.ReadyState <> 4): Loop
ie.ExecWB 17, 0
ie.ExecWB 12, 0
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=True
ActiveCell.Offset(0, 15).Select

これが出てきます。
というかこの繰り返しがほとんどです。
ちなみにこれはサイト全文をコピーして貼り付けるというものなんですけども

こういうプログラム文をまるごと
Set G とかで一文字にまとめたりできないんですかね?

あと、後半物凄く処理が重くなってたまに詰まるんですけども、それはやっぱりプログラムが長いのが原因ですか?
軽くさせるコツや、プログラムってあります?
163デフォルトの名無しさん:2013/02/13(水) 21:49:22.27
Sub G()
それ
End sub
しといて
Call G

変数は全部モジュールレベルで定義しとけ
164デフォルトの名無しさん:2013/02/13(水) 22:18:00.40
>>163
ありがとうございます。
サブプロシージャってやつですか。
これってやっぱ利用すると軽くなりますか?
165デフォルトの名無しさん:2013/02/13(水) 22:19:05.15
>>162
>変数とかみたいにこれをプログラムをショートカットする方法ってありますか?

ショートカットって?

>Set G とかで一文字にまとめたりできないんですかね?

関数で一文字にまとめることは可能。でも一文字はお薦めしない。

>あと、後半物凄く処理が重くなってたまに詰まるんですけども、それはやっぱりプログラムが長いのが原因ですか?

何に時間が取られているか判らないからなんとも言えない。

>軽くさせるコツや、プログラムってあります?

知らん。
そんな簡単に手に入るのなら俺も知りたい。
166デフォルトの名無しさん:2013/02/13(水) 22:23:18.46
ならん
処理終わったらieのインスタンスをちまちま殺してるか?
クリップボード処理も終わったら空にしてみたら
167デフォルトの名無しさん:2013/02/13(水) 22:25:45.70
>>165
>でも一文字はお薦めしない。

なぜですか?

>>166
インスタンスをちまちま殺すってどういうことですか?
Exit〜ってやつですか?
168165:2013/02/13(水) 22:31:14.80
>>167
例えばプロシージャの名前を「G」にしたとする。
どのような処理をするプロシージャなのか一発で理解or想像できる?
俺はわからない。
169デフォルトの名無しさん:2013/02/13(水) 22:34:58.65
Gスポット
170デフォルトの名無しさん:2013/02/13(水) 22:41:48.55
単語短いと予約語があったりするからねえ
171デフォルトの名無しさん:2013/02/14(木) 00:14:29.24
予約語と被る名前付けるとかどこの素人だよ
172デフォルトの名無しさん:2013/02/14(木) 00:17:04.10
>>168
プログラムの目的によっては分かるかもしれないけどね
例えば色を扱う場合は緑の要素を取得するのだと想像できる
173デフォルトの名無しさん:2013/02/14(木) 00:20:40.91
いつも思うんだがこういうバカ(>>168)は絶対極端な例出すよな。
生存期間が数行とか文脈から使用目的が自明な変数にまで1文字数をダメという理由は?
174デフォルトの名無しさん:2013/02/14(木) 00:38:38.89
>>173
流れよめてるか?
1文字変数が絶対ダメとか言ってないぞ

これが脊髄反射ってやつですか
175桃白白:2013/02/14(木) 01:05:27.36
お前らこんばんわーーーー!!!! バレンタインおめでとおおおお!!!!!!

  旦旦旦旦旦旦旦旦旦旦旦/⌒ヽ旦旦旦旦旦旦旦旦旦
  ⊂二二二二二二二二二二( ^ω^)二二二二二二二二⊃  お茶が入りましたおー
                  |    /
                  ( ヽノ
                  ノ>ノ
              三  レレ


                         ∩     ダシャーン
       ミ                 //
     ミ    ⊂'ヽ  ∩      //   \
      ミ    \\\\_,,,,,,,,/ ∠          /
             \\\\    .,''.,':.',,      .,':.',, .,': l  .,':.',,|[]].,':...,
    ガッ        )   \\      ).,':.',,:.',,  []] .,':.',,.,':.',,.,日  .,':.',,.,':.',,          /
    凵@  ⊂二二二、___ヽ \_,,..ノ  /[]].,':',,:',[]]/[]]\[]].,':.',,|[]].,':.',, _ .,':.',,]]/ 日.,':.',,.., . ..,,,;:[]]
176デフォルトの名無しさん:2013/02/14(木) 01:12:39.91
>>174
おすすめしない理由を聞いてるんだが?
また気分かカス
177デフォルトの名無しさん:2013/02/14(木) 02:21:40.81
178デフォルトの名無しさん:2013/02/14(木) 14:34:07.38
それよりも、>>162 がアホみたいなビジーループ回してることを
指摘してやる優しさは無いのかね。
179デフォルトの名無しさん:2013/02/14(木) 15:20:56.02
むしろ漢字一文字で表現しろよ、日本人なら
外字作って無理矢理な名前にするとかお勧め
180デフォルトの名無しさん:2013/02/14(木) 17:01:25.13
excel 2010のVBAで
application.screenupdating = false で
printout preview:=trueのプレビューでリボンが無反応になるバグ
直ったかな?
181デフォルトの名無しさん:2013/02/14(木) 17:23:07.99
本当にバグならそういう報告や質問はMSにしろ
なんで適材適所を弁えられないかねぇ、最近の子は
182デフォルトの名無しさん:2013/02/14(木) 17:27:50.83
>>181
本当にバグだし、2013を使ってる人が>>180がFixされてるかどうか確認してるかもしれないでしょ
どうでもいい質問より、よっぽど有用だわ
183デフォルトの名無しさん:2013/02/14(木) 17:34:21.49
質問スレなんだから知らないなら回答しないかせめて誘導URL張ればいいんじゃね
そういう返しはヘイトためるだけだ
茶化すならよっぽどセンスあるレスを返すべきだろ
ごくまれにいい揚げ足取りをするようなセンスを持つ人もいる

そう、桃白白ならね
184デフォルトの名無しさん:2013/02/14(木) 17:37:12.62
MS行けとかいうなら、それこそ大体の質問は「アビバ行け」で済むしな
VBAエキスパートコースなるものがあるらしい(俺調べ)
185デフォルトの名無しさん:2013/02/14(木) 17:41:53.38
>>181
おっさん見苦しいぞ
仕事しろよ
186デフォルトの名無しさん:2013/02/14(木) 18:07:55.04
>>178
俺もやるけど、何か拙いの?
正しいやり方があるなら教えて
187デフォルトの名無しさん:2013/02/14(木) 18:11:52.96
>>185
悔しいのうw悔しいのうww
188デフォルトの名無しさん:2013/02/14(木) 18:13:57.22
>>183
そういうレスが嫌なら2chは向いてない。
煽りは挨拶程度のものw
189デフォルトの名無しさん:2013/02/14(木) 18:17:38.06
でも自分が煽られたら嫌なんでしょw
190188:2013/02/14(木) 18:23:32.65
>>189
全然。
煽りをまともに受けてたら精神が逝っちゃうよw
191デフォルトの名無しさん:2013/02/14(木) 18:23:42.16
煽ることを我慢できないのかねぇ、最近の子は
192デフォルトの名無しさん:2013/02/14(木) 18:25:37.91
空気読め、馬鹿ども
193デフォルトの名無しさん:2013/02/14(木) 19:25:26.58
変数の命名規則はフロアの人間だわ
Dim Sasaki As String ' 佐々木部長
Dim Inoue As Range ' 井上さん(事務の方)
Dim Watanabe As Variant ' 使いすtry派遣の渡辺さん
194デフォルトの名無しさん:2013/02/14(木) 20:27:32.63
>使いすtry派遣の

ケミストリィみたいな役職なのかと思ったらなんだその中途半端な省略はw
195デフォルトの名無しさん:2013/02/14(木) 22:31:26.20
派遣がVariant型って……
便利に使い回されてる感が現れてるな
196デフォルトの名無しさん:2013/02/14(木) 22:49:40.58
>>186
Win32からSleepをインポートして、
DOループの中に入れる。
スリープしないと、VBAがCPU使ってしまって、
Webブラウザが使えるCPU時間が減るから、
時間がかかったり、タイムアウトしたりする。
最近なら大抵コアが2個以上あるから動きはするだろうけど。
197デフォルトの名無しさん:2013/02/14(木) 23:05:20.81
>168 :165:2013/02/13(水) 22:31:14.80
>>167
>例えばプロシージャの名前を「G」にしたとする。
>どのような処理をするプロシージャなのか一発で理解or想像できる?
>俺はわからない。


プロシージャを1文字にするとか常識的にないような極端な例しか出せない無能
198デフォルトの名無しさん:2013/02/14(木) 23:14:19.89
プロシージャって単語が1レスに3回以上出てくると、一読したとき脳内でジャブローって変換されるからこまる
199桃白白:2013/02/14(木) 23:15:35.15
>>197
ちょいと落ち着きなさいよあんた。質問者が1文字の関数にすることが
できるかと問うて回答者ができるけどやらんほうがええよと答えたわけっしょ。
そういうわけっしょ。ちょいと落ち着きなさいよあんた。桃白白超クール。
200デフォルトの名無しさん:2013/02/14(木) 23:21:38.11
桃白白さんだ!

でもクールだけど超クールではないかな・・・
201デフォルトの名無しさん:2013/02/14(木) 23:24:43.44
>>197
だから流れ読めてるかって言ってるんだが
202デフォルトの名無しさん:2013/02/14(木) 23:27:03.45
はいはい判った、俺が判定してやるよ

>>173
質問に答えてもらったんだからお礼いってさよならしような


はい、解散!
203186:2013/02/15(金) 05:06:14.32
>>196
回答ありがとうございます
つまり>>162で言えばこういう事ですか?

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Do While ie.Busy Or (ie.ReadyState <> 4)
Sleep 0
Loop
204デフォルトの名無しさん:2013/02/15(金) 05:34:19.09
>>203
先に>>196じゃないことを断っておく。
Sleep 0じゃ意味ないでしょ。
ie.BusyがFalseになるかie.ReadyStateが4になってほしい時間を設定しないと。
どれくらいの時間Sleepする必要があるのかは設計者が決めることなんで回答は出来ない。
205デフォルトの名無しさん:2013/02/15(金) 08:36:47.03
sleep 0はdoevents 扱いなんじゃねえの?
206デフォルトの名無しさん:2013/02/15(金) 08:43:42.21
え、今なんて?
207デフォルトの名無しさん:2013/02/15(金) 08:57:09.80
状態が真かどうか判定して、偽ならループかける処理
待機時間指定する必要ないじゃない?
ループ処理中にマシンが他の動作出来るように、一瞬中断させてる
タイムアウト時間の設定とは違うと思うよ
自分で設定しろってことだな
208203:2013/02/15(金) 11:28:39.14
>>204-207

ああ、なんか間違ってましたか。
未だちゃんと理解できて無い様ですみません。

私の理解としては

IEの状態が整うまで空ループを回すけれど、
タダの空ループだとそれ自体がCPUのリソースを食ってしまうから
肝心のIEの処理が疎かになる。

そこでSleep 0とかDoEventsでExcelから他のプロセス(この場合はIE)に
CPUを明け渡すことにより処理をスムーズに行えるようにする。

DoEventsだとExcelの方でキー入力とか受け付けたりするから、
問答無用で他のプロセスに制御を明け渡すSleep 0を使う。

って事なのかと考えました。

>>196を読んでからSleepについてググッたら、この辺の記事がヒットしまして、

http://blogs.wankuma.com/jitta/archive/2010/05/08/188819.aspx

http://support.microsoft.com/kb/158175/ja

スレッドとかプロセスとか、タイムスライスとかいった言葉が出てきて
それら前提条件となる用語自体に知識が不足しているため
かなり怪しい推測になっています。
209デフォルトの名無しさん:2013/02/15(金) 11:34:34.54
特に間違ってるようには思えない
その処理を基本にコード組んで良いかと
210デフォルトの名無しさん:2013/02/15(金) 11:50:28.18
>>186
IEを操作する必要性が無いから調べる気全然無いけど、

Private WithEvents ie As InternetExplorer
って宣言して、

Set ie = New InternetExplorer
として、

Private Sub ie_BeforeNavigate2()
とかのイベントハンドラを使うのが正解かもよ。
211208:2013/02/15(金) 12:06:30.00
>>209-210
どうもありがとうございます。
参考にさせていただきます。
とはいえ、また知らない言葉が……orz

とりあえずこの辺とかを読めばよいのかな?

http://wiki.livedoor.jp/twoflat1017/d/IE%A4%CE%A5%A4%A5%D9%A5%F3%A5%C8%C8%AF%B2%D0%A4%F2%CA%E1%C2%AA

先は長そうです。
212デフォルトの名無しさん:2013/02/15(金) 12:42:45.66
>>211
とっかかりは、そのページでいいと思う。

VBAの場合は、参照設定でMicrosoft Internet(だかなんだか)を指定して、CreateObject()ではなく

As InternetExplorer

として使わないと、イベントハンドラの追加とかが不便(できないことはないのかもしれない)。
あと、参照設定しないと、オブジェクトブラウザ(F2)で見れないのかもしれない。
213デフォルトの名無しさん:2013/02/15(金) 12:44:05.11
なお、Sleep()を使用した待機方法で十分なら、イベントハンドラを扱う方法は知らなくてもいい。
214211:2013/02/15(金) 13:04:27.71
>>212-213
色々と教えてもらえてありがたいです。
参照設定はFileSystemObjectなどで過去にやったことがあるので大丈夫でした。

知らなくても困らない、というのもごもっともなのですが、
(実際、今まではスリープすらやらずに空ループで回してたわけですし)
多少なりとも向上心はあるというか、
知らないことを知るというのはそれ自体楽しい事ですね。
215デフォルトの名無しさん:2013/02/15(金) 13:24:10.29
Sleep 0って勘違いしてたわ
一旦スタジオにお返ししまーす
なイメージなのね
216デフォルトの名無しさん:2013/02/15(金) 20:17:37.40
↑バカ
217デフォルトの名無しさん:2013/02/15(金) 20:51:07.19
↑童貞
218デフォルトの名無しさん:2013/02/15(金) 20:52:25.38
↓イケメン
219デフォルトの名無しさん:2013/02/15(金) 20:54:43.41
照れるなぁ
220デフォルトの名無しさん:2013/02/15(金) 20:57:28.28
↑自演乙
221214:2013/02/15(金) 21:00:56.43
桃白白はザーメン大好きの変態
222デフォルトの名無しさん:2013/02/15(金) 21:02:23.66
お前パイパイに何した?
223デフォルトの名無しさん:2013/02/15(金) 21:14:08.22
ぱいぱんってマンコとかチンコとか小学生並みの
下ネタしか言わないし変数定義すら間違ってる馬鹿だから
ここにこないで欲しい
224214:2013/02/15(金) 21:15:21.44
>>221
成りすましは勘弁してください
私は無関係です。
225デフォルトの名無しさん:2013/02/15(金) 21:38:46.04
桃白白は2chレベルで見れば並以上、中の上か、上の下くらいの頭持ってるぞ
ただ、知識はまだまだだし、その割りに自意識過剰で自己顕示欲が強いのが難だが
性格はさておき、根本的な頭の出来は悪くない

数年後は、今では過剰な自意識に見合うだけの知識を身につけて
自己顕示欲からガンガン回答付ける中堅回答者くらいにはなってるかもしれない
226デフォルトの名無しさん:2013/02/15(金) 21:43:16.08
しかし人間性とか言動とかキモい
227デフォルトの名無しさん:2013/02/15(金) 23:01:54.14
変数定義が間違ってるって、変数の概念を間違って解釈してるって事?
228デフォルトの名無しさん:2013/02/15(金) 23:07:51.72
おまんこ
229デフォルトの名無しさん:2013/02/15(金) 23:44:57.17
SleepかWScript.Popupか。みたいな。
230デフォルトの名無しさん:2013/02/16(土) 07:02:19.02
で結局
Do While ie.Busy Or (ie.ReadyState <> 4): Loop
これはどう改善すればいいわけ?
答え教えてよ
てゆか、
231デフォルトの名無しさん:2013/02/16(土) 08:24:44.23
俺のVBAは例えば
Sub sleeptest()
Sleep(1000)
End Sub

って感じでSleep使うと
コンパイル エラー:
SubまたはFunction が定義されていません。

で出るんだけどなんで?
アホなの?普通に定義されてるし
232デフォルトの名無しさん:2013/02/16(土) 08:42:44.84
>>231
Sleepの定義は?
233デフォルトの名無しさん:2013/02/16(土) 08:48:43.72
ああ忘れてた
これか
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Sleeptest()
Sleep(1000)
End Sub
でいいのか

>ie.BusyがFalseになるかie.ReadyStateが4になってほしい時間を設定しないと。

そんなの設定できんの?
ようするに、Sleep(その設定した時間)にすりゃいいってことかい?
234デフォルトの名無しさん:2013/02/16(土) 09:22:21.25
>>233
>ようするに、Sleep(その設定した時間)にすりゃいいってことかい?

いいと思う。
235デフォルトの名無しさん:2013/02/16(土) 11:15:29.57
フリーズすんだろバカ
236デフォルトの名無しさん:2013/02/16(土) 11:21:44.15
>ie.BusyがFalseになるかie.ReadyStateが4になってほしい時間を設定しないと。

これは

Do While ie.Busy Or (ie.ReadyState <> 4)
Sleep 0
Loop

だよ
わざわざ待機させる必要なんてない
このループ構文の意味を理解してないだけだろ

強いてあげるなら、このループの中にタイムアウト設定入れるくらい
237デフォルトの名無しさん:2013/02/16(土) 14:25:07.05
定義も何もまんこいじれば気持ちいいって事だろks
238デフォルトの名無しさん:2013/02/16(土) 23:48:03.82
>>236
こいつバカすぎ
239デフォルトの名無しさん:2013/02/17(日) 00:24:06.77
>>238

??
どこか間違ってる?
240デフォルトの名無しさん:2013/02/17(日) 01:14:36.50
Sleep 100 が一般ダヨネ
241デフォルトの名無しさん:2013/02/17(日) 02:53:20.94
omanko
242デフォルトの名無しさん:2013/02/17(日) 03:17:46.22
Sleep 0ってwwwwwwwwwwwwwww
ギャグ?
243デフォルトの名無しさん:2013/02/17(日) 05:13:34.29
でー、結局何が正解なの?

 知 ら な い な ら 別に答えなくていいよ

 知 ら な い なら 知 ら な い で い い ん だ よ ?

お前の知ったかぶりショーを見るために聞いてるんじゃないからね。
答えを聞きに来てるんだ。
こんなとこでお前の小さい見栄を張ったって仕方ないと思わないか?
答えを望まれているんだから、望まれた答えだけを述べろ。
244デフォルトの名無しさん:2013/02/17(日) 05:15:58.87
あと、答えもしないで偉そうな態度をとるな。
望まれた答えも出さないお前などゴミ同然なんだぞ?
用もないし価値もない。
何を根拠にそんな偉そうな態度をとってるんだ?
いつからお前が博士になったんだ?
ネットで見栄をはりたいなら、正々堂々答えくらい出してみろよゴミクズ。
そしたらいくらでも感謝してやる。
答えも出さずに威張ってるだけのお前に頭を下げる理由などどこにもない。
245デフォルトの名無しさん:2013/02/17(日) 05:22:12.84
てゆかさ、Sleepって
Do While ie.Busy Or (ie.ReadyState <> 4)
Loop
この中に入れなきゃだめなの?

Sleep(xxx)
Do While ie.Busy Or (ie.ReadyState <> 4)
Loop

こっちの方よくね?
もしxxx/1000秒たってもまだ待機状態ならループに回して、
もう待機状態終わってんならループに回す必要もないし

いつまでも出し惜しみしてんじゃねーよ
別に答えて誰かが困るわけでもねーんだし
246デフォルトの名無しさん:2013/02/17(日) 06:52:55.46
247デフォルトの名無しさん:2013/02/17(日) 09:25:42.01
ループの中にDoEventsは必須
鯖や回線などの都合で無限ループに落ちるか、長時間戻ってこない可能性があるので

タイムアウトの処理はブラウザなら秒単位になるだろうから、Sleepやループの回数で調整するんじゃなくて
Application.OnTimeでフラグを立てる方式にする
248デフォルトの名無しさん:2013/02/17(日) 09:33:38.66
煽ってるやつは何がわからんの?
恒常ループとかdoeventsとかsleep処理使ったことないから納得できないだけかね
何が判らないかも言わないと説明しようがないんだよね
249デフォルトの名無しさん:2013/02/17(日) 10:02:01.70
俺わかったぜ
何がわからないかも自分で理解できないから、目に付いたレスに粘着するしか出来ないだけだぜ
250デフォルトの名無しさん:2013/02/17(日) 10:16:26.03
>>248
煽ってる奴に説明とか、何か勘違いしてないかい?
普通にスルーしときなよ。
251デフォルトの名無しさん:2013/02/17(日) 12:58:36.78
>>243-244
こういう煽ってる馬鹿は何が楽しいの?
なんか必死だな
おまえみたいな馬鹿には2chは無理だよ
252デフォルトの名無しさん:2013/02/17(日) 13:01:24.40
つ 鏡



そういうことなんだろ > 何が楽しいの
253デフォルトの名無しさん:2013/02/17(日) 13:07:51.34
分かって無いのにSleep代わりにDoEvent使ってると後で泣くぞ
254デフォルトの名無しさん:2013/02/17(日) 13:18:27.66
おめこ
255デフォルトの名無しさん:2013/02/17(日) 15:31:38.89
煽りにもなってないんだから暇つぶしだろ
それに反応するお前らも暇つぶしだし俺も暇つぶし

DoEventoってどんなメリット/デメリットがあるか端的に言うと?
256デフォルトの名無しさん:2013/02/17(日) 16:01:53.07
単純にSleepとDoEventsが同じようなものだと勘違いしていて恥かいた、だと想像。
257デフォルトの名無しさん:2013/02/17(日) 16:10:15.39
DoEventsは内部でSleep0呼び出してるくらいしか知らないな
普通に処理戻すのとは違うの?
258デフォルトの名無しさん:2013/02/17(日) 16:17:45.49
くらいしかって、その辺も解ってないじゃんw
259デフォルトの名無しさん:2013/02/17(日) 16:19:07.01
じゃあ全然知らないんだな
んで、何が違うの?
260デフォルトの名無しさん:2013/02/17(日) 16:29:02.21
DoEventsによってメッセージキューのメッセージがその場で処理されるじゃん?
そうするとボタン2度押しが可能になったり、
text1.Textが処理の途中で変化したり

マルチスレッド出来ないからそれっぽく動かすにはDoEvents使うしかないけど、
用法・用量を守って正しく使わないとダメよってこと

簡単なツールならSleepで充分
261デフォルトの名無しさん:2013/02/17(日) 16:39:49.48
sleepだと画面更新がされないのか
そういや用例みてもsleepの後にDoEventsやってるわな
ありがと
262デフォルトの名無しさん:2013/02/17(日) 17:01:22.48
画面更新もウィンドウクローズもメッセージだからされないよ
調子乗ってもっと言うと、
5秒以上メッセージしかとしてんのがOSにバレると応答なしのレッテルを貼られる
また同じ領域にゴーストウィンドウが生成されて標準のウィンドウ操作は可能になるけど
消してたタイトルバーが見えちゃったりしてブサイクなんだよね
ユーザーも時間かかるの分かってるだろうし長時間処理を宣言するAPIとかあったらいいのに
263デフォルトの名無しさん:2013/02/17(日) 17:14:58.78
まんこでもいじってろよバカ
264デフォルトの名無しさん:2013/02/17(日) 18:09:28.26
ワシはティンコを2本持っている
2本目はとっておきだ(´・ω・`)b
265デフォルトの名無しさん:2013/02/17(日) 18:32:32.13
すべてのまんこに懺悔しな!!
266デフォルトの名無しさん:2013/02/17(日) 18:35:19.41
よう まんこマン
お前はまんこマンなwww
267デフォルトの名無しさん:2013/02/17(日) 18:50:18.91
必死になって煽ってるバカは鏡とか言ってるバカと同一人物だろ
スルーしとけよ
268デフォルトの名無しさん:2013/02/17(日) 19:17:13.83
>>251は煽る馬鹿を指摘しながら自分から煽って見せるって言う高度な自己言及レスなのに
自分で気付かずに今更必死になってレス返しってのもなかなかうまいな
269デフォルトの名無しさん:2013/02/17(日) 19:25:59.23
なんかここ数日の・・・なんだ? 荒れ具合?



すっごく自演っぽいんだけど、なんでこんなスレで遊んでるんだ
270デフォルトの名無しさん:2013/02/17(日) 19:40:46.23
すべて自演だろ
書き込んでる奴って2人だろ
俺を合わせると3人だな
271デフォルトの名無しさん:2013/02/17(日) 19:59:19.72
フッフフ・・・俺もいるぜ!
272デフォルトの名無しさん:2013/02/17(日) 20:11:37.48
白桃が記名と無記名を使い分けてるだけだと思ってるから実質、白桃と俺の二人しかいない
そうなんだろ?白桃
273デフォルトの名無しさん:2013/02/17(日) 21:29:01.97
まんこあきた
274デフォルトの名無しさん:2013/02/17(日) 21:35:06.83
ExecuteExcel4Macroメソッドで、別のブックのワークシートの
チェックボックスの値を取得しようとしてるのですが。。。

ExecuteExcel4Macro("get.object(62,""Check Box 18"")")
みたいにやっても、外部ワークシートの参照が指定できない。。。
対象のワークシートをactivateしててもダメだし、
こういう使い方はできないもんなんですかね。
275デフォルトの名無しさん:2013/02/17(日) 22:01:39.76
できるよ
ただ参照指定にmankoが抜けてるだけじゃん
276デフォルトの名無しさん:2013/02/17(日) 22:05:01.81
つまんね
277デフォルトの名無しさん:2013/02/17(日) 22:15:13.20
またパイパンかよ
くだらねんだよ
278デフォルトの名無しさん:2013/02/17(日) 22:25:54.06
駄目なようなのでCreateObjectします。。。
279デフォルトの名無しさん:2013/02/17(日) 22:29:44.65
>>276,277
馬鹿なの?なんでスルーできないの?
お前ここにくるなハゲ
280デフォルトの名無しさん:2013/02/17(日) 22:42:28.23
自演にマジレスw
281デフォルトの名無しさん:2013/02/17(日) 23:23:31.20
ハゲvsパイパンvs俺
282デフォルトの名無しさん:2013/02/17(日) 23:36:59.43
ここまですべてパイパンのまんこ
283デフォルトの名無しさん:2013/02/20(水) 13:16:34.95
ぬるぽ
284デフォルトの名無しさん:2013/02/20(水) 18:06:24.21
最近ExcelスレにVBAの質問が増えた
285デフォルトの名無しさん:2013/02/20(水) 22:26:20.58
ぬるぽとか言ってるヤツ、寒いよ
286デフォルトの名無しさん:2013/02/21(木) 06:22:06.12
ぬるぽ
287デフォルトの名無しさん:2013/02/21(木) 11:22:31.99
ぬゐぽ
288デフォルトの名無しさん:2013/02/21(木) 11:29:26.03
めゐぱ
289デフォルトの名無しさん:2013/02/21(木) 19:19:41.50
まんこ
290デフォルトの名無しさん:2013/02/21(木) 23:31:50.76
ぬるぬるまんこ
291デフォルトの名無しさん:2013/02/22(金) 09:47:52.04
データを遡って5件抽出(空行は無視)し、B列とA列の差をとりその平均を
取ろうとしているのですが??な状態です。
表のデータからは答えが5で割った106になるはずなのに
83.3333〜と6で割ってる値になってしまってます。

Option Base 0
Option Explicit

Sub testAVe()
Dim haba_array(5) As Long
Dim i As Long, found As Integer
Dim kbn As Integer

i = 9
kbn = 1

found = 0
Do Until found = 5
i = i - 1
If Cells(i, 1) <> "" Then
found = found + 1
If kbn = 1 Then
haba_array(found - 1) = Cells(i, 2) - Cells(i, 1)
End If
End If
Loop

Cells(10, 4) = Application.WorksheetFunction.Average(haba_array)

End Sub
292291:2013/02/22(金) 09:48:54.91
データは
a b
3 1913019190
4 1851018580
5 1839018500
6 1805018220
7
8 1877018890

となっています

ファイルはもし見て頂けるなら
大変お手数なんですが以下に ※excel2010
pass excel
http://www1.axfc.net/uploader/Sc/so/429290.zip
293デフォルトの名無しさん:2013/02/22(金) 10:05:55.09
>>291
データを格納している配列変数haba_arrayが0〜5の6個あるから
平均とると6で割ることになる
294291:2013/02/22(金) 10:19:24.04
>>293

一番基本的なことをすっとばしてしまった感じですか?^^;
確かにhaba_array(4)で合いました。

お騒がせすいません
295デフォルトの名無しさん:2013/02/22(金) 15:09:35.04
データシートの内容が次の時
     A    B   C   D   E   F   G   H  ・・・
  1  データ1(←集計対象の本体データ)
  2  データ2(同上)
  3  データ3(同上)
・・・・
200  データ200(←集計対象の本体データはここまで、但しデータ数は適宜追加されて増えていく)
201  (ブランク)
202  (ブランク) 数行ブランク行を挟む
・・・  (ブランク)
210  データ210(←上記本体データと同じ構成だが、注記として表記)
211  データ211(同上)
212  データ212(同上)
・・・
2XX  データ2XX(同上)

オートフィルターを設定
With Worksheets(ActiveSheet.Name)
.Range("A1").AutoFilter _
Field:=6, Criteria1:=XXX
End With

F列(6番目)で抽出を掛けた場合
行は1からスタートして上記では、集計対象の本体データは200まで(適宜追加される)
ところがオートフィルターを掛けると、ブランク行の下にあるデータ(210行〜とか)も
一緒に抽出されてしまう

抽出範囲をブランク行がある前行まで(上記では1〜200行、ただし行数は適宜増える)
にするにはどうすれば良いでしょう
296デフォルトの名無しさん:2013/02/22(金) 16:02:21.37
>>295
ググレカス!
297デフォルトの名無しさん:2013/02/22(金) 17:10:00.75
Range("A1").CurrentRegionじゃないの?
全然試してないけど。
298297:2013/02/22(金) 17:15:30.66
と思って今試してみたら、もともとオートフィルタってCurrentRegionが対象っぽいんだが、どうなのよ?
299デフォルトの名無しさん:2013/02/22(金) 17:42:59.23
>>295
Rangeって何を意味するのか全くわからないのかな?
意味がわかれば、こういうことができるんじゃね?って推測できるし
テストコードで動作確認くらいできるだろ。
300デフォルトの名無しさん:2013/02/22(金) 17:49:57.70
>>299
Rangeの意味について是非教えろください
301デフォルトの名無しさん:2013/02/22(金) 17:54:39.55
>>300
>>1★5を声をだして1億回嫁。
302297:2013/02/22(金) 17:56:10.53
201〜209行はホントに「データ無し」なのか?
ブランクってスペースが入ってるとかじゃないだろうな。
A1でCtrl+Shift+*ってやってみ?それがA1のCurrentRegionだ。
303デフォルトの名無しさん:2013/02/22(金) 18:43:21.49
>>301
おことわりだ
304デフォルトの名無しさん:2013/02/22(金) 20:44:07.67
>>301
299みたいな「仄めかし」のレスは誰にでも書けるんだよ
それこそRangeのこと理解して無くても書ける
それらしいことを言うだけ言って具体的なことは何も説明しないレスは
第3者が検証のしようもないただのゴミレス
305301:2013/02/22(金) 21:01:31.16
>>304
ほとんど答えを書いたんだけどなぁ。
直接答えを書くようなバカなことはしないよ。
CurrentRegionを使う方法もアリかもしれないけど俺だったらやらない。
>>302のような懸念もあるわけだから。

オートフィルタをかける行の範囲が分かっているんだったら
どこをいじればいいのかだいたい察しがつくと思うけど。
306デフォルトの名無しさん:2013/02/22(金) 21:17:01.35
だからそういうのを「仄めかし」というの

正解が一個じゃない以上、君の考えがそのうちのどれなのかも分からんし、
正解ではないかもしれない
でもそういうかき方だと検証もしようがないでしょ

ちなみに俺は質問者じゃないのでこの件が解決しなくても構わないが
思わせぶりな書きかたしてる人がどの程度のもんだか興味があるだけ。
307デフォルトの名無しさん:2013/02/22(金) 21:21:12.26
なぜか2ちゃんでコーチングしてるつもりになってる奴いるんだよな
308デフォルトの名無しさん:2013/02/22(金) 21:23:52.58
そうそう、たかがVBAでなにを得意げにっておもう
309デフォルトの名無しさん:2013/02/22(金) 21:24:39.38
>>305
>オートフィルタをかける行の範囲が分かっているんだったら
>ただし行数は適宜増える
だから分かってないんだろ

>>295
試したところはブランクってのが全くの未入力なら>>295でうまくいくけど
そうじゃないなら自分でオートフィルタする範囲さがせ
310デフォルトの名無しさん:2013/02/22(金) 21:45:54.23
>>307
えっ、質問スレで回答するのって
コーチングじゃないの?
311デフォルトの名無しさん:2013/02/22(金) 21:52:31.04
>>310
えっ、質問スレで回答するのって
上から目線で偉そうにして優越感に浸りたいだけなんじゃないの?
312デフォルトの名無しさん:2013/02/22(金) 21:53:26.51
質問です
longlong型って構わず使っていいものですか?
控えた方がいいですか?
313デフォルトの名無しさん:2013/02/22(金) 22:03:25.35
>>306
オートフィルタをかける範囲がわかればどこをいじればいいのか察しつかないの?
範囲がわからんというのはまた別個の話。

>>295のこのコード。
With Worksheets(ActiveSheet.Name)
.Range("A1").AutoFilter _
Field:=6, Criteria1:=XXX
End With

こんなのテストコードでちょこちょこいじればすぐわかるだろ。
314デフォルトの名無しさん:2013/02/22(金) 22:05:02.86
32bit環境で使わないならlonglong型使ってもいいんじゃね?
俺はそんなでかい数字扱うシチュエーション無いから使わないけど。
315306:2013/02/22(金) 22:11:35.80
>>313
ちょっと何言ってるか分からないwww

っつーか、俺が分かるかどうかの話じゃねーのよ
そーゆー「分かるやつには分かる」的な書き方自体が無価値だといってんの
316デフォルトの名無しさん:2013/02/23(土) 02:53:29.84
俺はまず Worksheets(ActiveSheet.Name) に突っ込みたい
317デフォルトの名無しさん:2013/02/23(土) 19:05:03.11
俺はまんこに突っ込みたい
318デフォルトの名無しさん:2013/02/23(土) 22:39:28.01
>>309
一応、ブランク行の一つ前、データ行の最後を調べて抽出範囲を指定する方法を考えてみた

Dim AZ As Integer ' データ列の最終行(A列)
AZ = ActiveSheet.Range("A1").End(xlDown).Row
Dim rng As String  ' オートフィルターを掛ける範囲
rng = "$A$1:$L$" & AZ

これで、範囲指定してフィルターを掛けてもやっぱりブランク行より下のデータも抽出されてしまう
因みに、データ列の最終行AZはブランク行の前の行番号になっているのだが
319デフォルトの名無しさん:2013/02/23(土) 23:46:39.51
manko
chinko
manko
chinko
320デフォルトの名無しさん:2013/02/25(月) 10:30:59.52
"filesearch"でexcel2010のヘルプを見ると
Microsoft Office XP (2000) 以降のオブジェクト モデルの変更
で、状態は非表示となっていて
非表示 メンバーは非推奨となっており、コードでの使用はお勧めできません。
ってでてくるけど、ファイルの検索には代わりに何を使えばいいんでしょ?
dir関数のループで?
321デフォルトの名無しさん:2013/02/25(月) 11:20:26.61
そこでまんこ
322デフォルトの名無しさん:2013/02/25(月) 11:23:43.50
別にDirを直接使ってもいいし、Dirをラップした自作関数使ってもいいし
FSO使ってもいいし、WinAPI使ってもいいし、.NET Frameworksの機能を拝借してもいい

非推奨だからって、使ったところで逮捕されるわけでもPCが爆発するわけでもないから
使いたければFileSearch使ったって構わない

どうぞ、お好きなように
323デフォルトの名無しさん:2013/02/25(月) 16:21:09.69
そんなもんなんでもええやろks
324デフォルトの名無しさん:2013/02/25(月) 16:24:17.36
FSO使っとけば間違いない
325デフォルトの名無しさん:2013/02/26(火) 22:15:23.68
シートに開発タブからボタンを2つ貼り付けて
MsgBox Application.Caller
で見ると、
ボタン1
ボタン2
ってそれぞれでてくるけど、これ名前を設定することは
出来ないんですか?

フォームに貼り付ける奴ならプロパティのところで
例えばbtn〜とかってするじゃないですか。
326デフォルトの名無しさん:2013/02/27(水) 02:36:10.94
>>325
デザインモードで名前ボックスに入力
327デフォルトの名無しさん:2013/02/27(水) 07:59:46.77
>>326
ありがとう
初めて知りました
328デフォルトの名無しさん:2013/02/27(水) 19:54:23.82
>>325
こいつばかwwwwww
ここで聞いたのが間違いだった
329デフォルトの名無しさん:2013/03/03(日) 00:02:00.95
型を宣言するメリットって何ですか?
330デフォルトの名無しさん:2013/03/03(日) 00:07:58.21
ちょと、早く、なる
331デフォルトの名無しさん:2013/03/03(日) 00:20:47.87
暗黙の型変換によるトラブルを防げるかもしれない
332デフォルトの名無しさん:2013/03/03(日) 01:08:13.25
インテリセンスが働くようになるので
入力の省力化と、スペルミス防止になる
333デフォルトの名無しさん:2013/03/03(日) 14:43:25.34
変数のサイズもちょっと減るでしょ。
334デフォルトの名無しさん:2013/03/03(日) 20:42:20.30
うんこして来る
335デフォルトの名無しさん:2013/03/03(日) 21:08:07.97
>>334
ケツふけよ
336デフォルトの名無しさん:2013/03/04(月) 09:16:43.52
色々あるサプリメントの中で
本当に口コミ・評判の良いサプリメント探しはここで決まりです。

http://kennko-kaigi.com/
337デフォルトの名無しさん:2013/03/04(月) 18:39:34.65
officeで連携してVBAを組むのを学ぶ本を教えてくだされ
「Officeの達人」という本があるが、古い、高い(中古で)、臭い、のため利用は遠慮してます。
338デフォルトの名無しさん:2013/03/04(月) 20:03:58.16
>officeで連携してVBAを組む
の意味が良くわからん。
339デフォルトの名無しさん:2013/03/04(月) 20:25:19.59
もしかして、昔のOffice Developerでやってたアレか?
いまさらそれを学んでも意味無い気がするけど
340デフォルトの名無しさん:2013/03/04(月) 21:53:45.02
excel単体だけでなくwordやpowerpointなどもvbaで動かしたいってことでしょ
俺も興味はあるけど
341デフォルトの名無しさん:2013/03/04(月) 22:07:26.66
wordでもExcelと同じようにマクロの記録とかできるし、
クリックしたら文字の大きさや色を変えるとか、文章を勝手に改変とか一応はなんでも可能だけど
今ひとつ使い道が思いつかない
342デフォルトの名無しさん:2013/03/04(月) 22:28:36.49
生データの蓄積と一次加工はAccess
データの二次加工はExcel
グラフィカルなアウトプットはPowerpoint
とか?
343デフォルトの名無しさん:2013/03/04(月) 22:34:34.65
そんな使い分けを想定できる頭の有る奴が
あんな意味不明な質問の仕方すると思うか?
344デフォルトの名無しさん:2013/03/04(月) 22:54:50.33
そんなこといわれても・・
345デフォルトの名無しさん:2013/03/06(水) 16:11:06.72
初心者ですが、選択中の図形の名前を変数に代入する式を教えてください。
346デフォルトの名無しさん:2013/03/06(水) 16:21:02.11
あ、できた
347デフォルトの名無しさん:2013/03/06(水) 20:36:04.31
textbox1とtextbox2、ボタン1があります。
ボタン1を押した時、textbox1に入ってるテキストを2にコピーしたいのですが、
やり方を教えて下さい。
348デフォルトの名無しさん:2013/03/06(水) 20:46:19.85
>>347
それをコードに落とせばいいだけじゃん。
何がわからないの?
349デフォルトの名無しさん:2013/03/06(水) 21:02:36.70
>>348
レスありがとうございます。
どういう風に書けばいいかわからないです
フォームの編集でボタンをダブルクリックを押して
クリックした時のイベントになにか入力することはわかるんですが・・・
↓こんな風な記述を書けばいいんですか?正しい書き方がわかりません。。。
textbox1.text.copy.textbox2.text
350348:2013/03/06(水) 21:09:34.91
>>349
それくらい「vba テキストボックス」ググれば腐るほどヒットするよ。
351デフォルトの名無しさん:2013/03/06(水) 21:39:46.39
Private Sub CommandButton1_Click()
TextBox1.Text = TextBox2.Text
End Sub
これでもできません。。。。
352デフォルトの名無しさん:2013/03/06(水) 21:57:43.51
Private Sub CommandButton1_Click()
TextBox2.Value = TextBox1.Value
End Sub
353デフォルトの名無しさん:2013/03/06(水) 22:03:02.74
>>351
ん?これってTextBox2.TextをTextBox1.Textに代入する意味なんだけど。
TextBox2に文字列入力しても駄目ってこと?
因みに俺の環境Win7 ExcelXPではTextBox2に文字列入力すれば動作するよ。
354デフォルトの名無しさん:2013/03/06(水) 22:15:18.01
代入が右から左に行くタイプの言語の欠点だよな。
データの流れが人間の感性に反している。
やはりCOBOLに勝るデータ処理言語はないと確信する。
355デフォルトの名無しさん:2013/03/06(水) 23:05:54.64
コボルのおばちゃま

まだ生きてんのかな
356デフォルトの名無しさん:2013/03/06(水) 23:40:25.54
ttp://mugicyan.gooside.com/excel/user_f/gif/lesson_05_03_02.gif
すいません。チェックボックスにチェックが入ってる状態でボタンを押すと記入するってやりたいんですが
 If chkKokugo = True Then
    Range("D3").Value = txtKokugo.Value
  End If

みたいにいちいち、If End Ifで囲まないと無理でしょうか
チェックが入ってる&ボタンを押す=無条件で記載したいと考えています
357デフォルトの名無しさん:2013/03/06(水) 23:55:01.98
4教科くらいならそれでいいと思うよ
358デフォルトの名無しさん:2013/03/07(木) 01:02:40.07
>>356
Range("D3") = IIf(chkKokugo, txtKokugo, "")
359デフォルトの名無しさん:2013/03/07(木) 01:09:00.56
>>358は、すでに入ってるデータが消えちゃう

Range("D3") = IIf(chkKokugo, txtKokugo, Range("D3"))
360デフォルトの名無しさん:2013/03/07(木) 01:26:57.22
If End Ifくらい書けばいいじゃないか、何を躊躇う必要があるのか
361デフォルトの名無しさん:2013/03/07(木) 02:56:30.72
End If を使わない書き方もあるけど
If chkKokugo Then Range("D3") = txtKokugo
362デフォルトの名無しさん:2013/03/07(木) 03:10:30.12
4つくらいなら普通にIfブロックを個数分書けばいいと思うけどね
もっと多いなら、クラス使ってコントロールを配列にしちゃうが
363デフォルトの名無しさん:2013/03/07(木) 05:52:07.82
>>351
出来たかどうかの反応ナシかよ。
364デフォルトの名無しさん:2013/03/07(木) 08:56:35.42
For Each ABC In ie.document.getElementsByTagName("input")
If ABC.getAttribute("value") = "確認する" Then
ABC.Click
Exit For
End If
Next

Do While ie.Busy Or (ie.ReadyState <> 4)
Sleep (10)
Loop

Sleep (1000)

For Each ABC In ie.document.getElementsByTagName("input")
If ABC.getAttribute("value") = "OK" Then
ABC.Click
Exit For
End If
Next
365デフォルトの名無しさん:2013/03/07(木) 08:58:01.78
>>364なんだけど
なんかいっつも
実行時エラー'70':

書き込みできません。

って出るんだけど何が原因なのこれ?
上手くいくときはうまくいくのに、
なぜかたまにこのエラーが出るの。
なんでうまくいくときがあるのにエラーが出るんだよ
ほんとゴミ。


If ABC.getAttribute("value") = "OK" Then


の部分がいっつも黄色になるんだけど
何が悪いのこれ
本当に頭にくるね
順序通りに書いてんだから順序通りに行動しろよこのゴミクズツールめ
366デフォルトの名無しさん:2013/03/07(木) 09:16:41.47
この人は面倒そうだから釣られない
367デフォルトの名無しさん:2013/03/07(木) 09:18:37.21
取得する前に、その要素が存在するかの確認をするのが基本

オマエがやってることは空き巣や強盗と一緒
普通は呼び鈴鳴らして、「鍵は開いてるのでどうぞ」と声が掛かってから部屋に入るのに
いきなり入ろうとして「鍵掛かってて入れなかった」「入ったはいいが見つかって逮捕された」って文句言ってるレベル
368デフォルトの名無しさん:2013/03/07(木) 13:45:30.28
>>365
お前がゴミクズのコードを書いているという見方はできないのねw
369デフォルトの名無しさん:2013/03/07(木) 20:09:44.45
ボタンをクリックした時、
チェックボックスを全選択したいんだけど
Checkbox1=true
Checkbox2=true
Checkbox3=true

Checkbox1=false
Checkbox2=false
Checkbox3=false
みたいにしてボタン2つ作ったほうがいいかな?
例えばcheckbox2だけがチェックしてある時、ボタン押した時
1と3がチェックされるべきなのか
2がチェック外れるべきなのかとか
考えながらやるのめんどくさいし・・・
370デフォルトの名無しさん:2013/03/07(木) 20:20:34.03
お前の作りたいように作れよ
371デフォルトの名無しさん:2013/03/07(木) 22:33:30.91
>>369
自分の作り方だと、全てチェックされている時のみ全解除で、
それ以外は全選択状態にするようなトグル動作をさせる。
372デフォルトの名無しさん:2013/03/08(金) 14:40:47.70
すまんが教えろ下さい。
373デフォルトの名無しさん:2013/03/08(金) 14:44:11.02
誤爆った。

Windows8 / Office 2010

Excelの条件付き書式を
A1 : A5000 (セルの数5000以上ならOK)
に対して手動で設定(条件は何でもよい)
保存して閉じる。そのファイルを開く問題ない。

上記作業をVBAで設定
保存して閉じる。そのファイルを開く→開かない。

なぜか知っている奴はおらんかー
374デフォルトの名無しさん:2013/03/08(金) 14:46:02.53
excel.exeが終わってないとか
375デフォルトの名無しさん:2013/03/08(金) 14:49:18.20
すまん。追加

ブックはxlsmだと問題ないんだけど
そのファイルをxlsやxlsxで別名保存すると駄目なんです。
376デフォルトの名無しさん:2013/03/08(金) 14:55:53.23
まずはコードを全部貼れ

それが嫌なら、さようなら
377デフォルトの名無しさん:2013/03/08(金) 15:32:39.82
>>374
ありがと。だがそうではなさそうだ。

>>376
そうだね。すまん。

下記をoffice2010でxlsかxlsxのブックで実行する。
ファイル保存→一旦閉じる。再度開く。→開けない。
ちなみにxlsのブックはoffice2003だと開くことが出来た。

Sub TEST()
Dim i As Integer

Application.ScreenUpdating = False
For i = 1 To 5000
ActiveSheet.Cells(i, 1).Select
With Selection
.Value = i
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=10"
.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
.FormatConditions(1).StopIfTrue = True
End With
Next i
Application.ScreenUpdating = True
End Sub
378デフォルトの名無しさん:2013/03/08(金) 15:44:56.54
連投すまん。

こっちのコードでもNGだし、手動で設定した条件付き書式のセルを
FOR文ループでコピーして貼り付けたりしても駄目だす。

Sub TEST2()
Dim i As Integer

Application.ScreenUpdating = False

For i = 1 To 5000
ActiveSheet.Cells(i, 2).Select

With Selection
.Value = i
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="10"
.FormatConditions(1).Interior.ColorIndex = 6
End With
Next i

Application.ScreenUpdating = True
End Sub
379デフォルトの名無しさん:2013/03/08(金) 19:36:49.01
最近まんこいじってないなあ
380デフォルトの名無しさん:2013/03/08(金) 19:49:04.40
>>378
手元にExcel2007以降のものが無いから確認は出来ないけど
マクロ含んだブックだから拡張子がxlsmじゃなきゃダメなんじゃないか?

保存するときにfileformat=xlwrkbooknormalを指定して拡張子xlsで保存したらどうなる?

Workbook.SaveAs Filename:="hoge.xls",Fileformat:=xlworkbooknormal
381デフォルトの名無しさん:2013/03/08(金) 20:40:46.58
xlworkbooknormalじゃなくてxlExcel8だったかもしれん
382デフォルトの名無しさん:2013/03/08(金) 21:23:22.63
>>375
> ブックはxlsmだと問題ないんだけど
> そのファイルをxlsやxlsxで別名保存すると駄目なんです。

当たり前だろw
拡張子をxlsmにしないとマクロが保存されないんだっつのw
383デフォルトの名無しさん:2013/03/08(金) 21:34:21.86
目的は条件付き書式を設定することなんだし、
それが済んだ後はマクロが保存される必要は無いんじゃないの?
384デフォルトの名無しさん:2013/03/08(金) 22:07:31.77
>>373
64bit版Win8+32bit版Excel2013で>>377を使って試してみた。
xlsx形式は問題無く開けるけど、xls形式だと開くのに二分近くかかるな。
385384:2013/03/08(金) 22:13:04.84
xlsx形式の中身をバラいたら、同じスタイルが5000個定義されてた。
これは酷いw
386デフォルトの名無しさん:2013/03/08(金) 23:01:24.86
>>373
開かないってのはどういう状況なんだ?
とりあえずVista EXCEL2007(ともに32ビット)で発生せず
2010以降の問題かWin8の問題か64ビットOS+32ビットEXCELの問題か

>>385
http://support.microsoft.com/kb/2537195/ja
この動作は仕様です。
387デフォルトの名無しさん:2013/03/09(土) 19:49:26.73
VBA初心者ですが
同じセルにWindowsのクリップボードに記憶されている文字情報をペーストする命令を書いたのですが
高速で繰り返し行っているとなんかのタイミングでセルの中のカーソルが点滅を始め
そうなると文字をペーストしなくなるのですが
手作業ならエスケープを押すと点滅しなくなりますがVBAで同じ事をやるにはどうすれば良いのでしょうか?
388387:2013/03/09(土) 19:55:10.29
>>387
Sub Macro1()
Range("A3").Select
ActiveSheet.Paste
Calculate
End Sub

このような超単純なコードです。ショートカットキーを割り当ててキーボードマクロのソフトで他のアプリと連携して連打させています。
389デフォルトの名無しさん:2013/03/09(土) 20:02:43.65
処理が完了しない状態で次の処理を始めようとしてたり、手順に無理があるんじゃないの
390デフォルトの名無しさん:2013/03/09(土) 23:16:35.16
>>389
おっしゃるとおりでした
マクロ連打速度の調節で解決出来ました。ありがとうございました。
なにげにエスケープキーのコマンドはVBAに無いのですね、、VBAですぐ終わらす作業のはずが奇問を踏んでしまったようでわかるまでに変に時間をとられてしまいました
391デフォルトの名無しさん:2013/03/10(日) 01:25:05.45
VBAド初心者ですが
表の選択で
Range("A1:F9").Select
となっているところを
表の大きさが変化してもいいように
1セル選択した後に
Control+Aのようなコマンドは無いのでしょうか?
宜しくお願い致します。
392デフォルトの名無しさん:2013/03/10(日) 01:56:17.33
>>391
UsedRangeかCurrentRegion

UsedRangeはそのシートの使用範囲
下図ならA1:E5

CurrentRegionは空白の行列で囲われた表範囲
下図において、Range("A1").CurrentRegionならA1:B3
Range("D3").CurrentRegionならD3:E5
但し、右下のいろは表がC3:D5で、C列のような空白列の区切りが無ければ
Range("A1").CurrentRegionは右下のいろは表も含むA1:D5

   A  B  C  D  E
 ┌─┬─┐
.1│あ│ 1.│
 ├─┼─┤
.2│い│ 2.│
 ├─┼─┤  ┌─┬─┐
.3│う │ 3.│  │い│ 5.│
 └─┴─┘  ├─┼─┤
4.            │ろ.│ 6.│
             ├─┼─┤
5.            │は│ 7.│
             └─┴─┘
393391:2013/03/10(日) 01:56:52.24
>>391
少々乱暴ですが1シートに1つの表であったため
Cells.Select
でとりあえずは解決できました。
394デフォルトの名無しさん:2013/03/10(日) 01:56:57.42
>>391
RangeオブジェクトのCurrentRegionプロパティ
395391:2013/03/10(日) 01:59:12.07
>>392
おおおおお!これは素晴らしいですね!!!
ありがとうございます!

>>393
ニアミスでした。
396391:2013/03/10(日) 02:02:43.70
>>394
ありがとうございます。
397デフォルトの名無しさん:2013/03/10(日) 17:30:19.66
ななみの64に、excel2010を過日仕込みました。
すると、vista君では正常動作していたUserFormの移行(Unload と Show)
が不安定になり、excelがハングして終了します。

Unloadが次FormのShowの後だと実行時エラー'2147417848(80010108)'
オートメーションエラー、オブジェクトはクライアントから切断と
逆に次Formのshowが先でその後Unloadするとモーダルエラーです、
いずれのFormもモードレスで、vista&amp;2007では正常でしたが

解決はさておき、同様のエラーって他の人にもあるのでしょうか
398デフォルトの名無しさん:2013/03/10(日) 17:53:44.77
VBAs初心者ですが
GOTO文のラベルの一部を変数にする事は出来ないのでしょうか?

GoTo end 『変数1.2.3・・』

end1:
命令1・・

end2:
命令2・・

end3:
命令3・・



間違った使い方かもしれませんが
実験的にこのようなコードを書こうとしています。
宜しくお願い致します。
399デフォルトの名無しさん:2013/03/10(日) 18:07:30.20
>>392
通りすがりだけど、CurrentRegion なんてプロパティがあるんだな。
メモっておこう。
400デフォルトの名無しさん:2013/03/10(日) 18:12:37.34
>>398
On 変数 Goto Sub1, Sub2, Sub3 ... でいいと思うけど、
どっちかと言うと
Select Case 変数
Case 1:
 MsgBox "Sub1"
Case 2:
 MsgBox "Sub2"
...
Case Else
 MsgBox "???"
End Select
の方がいいと思う。
401398:2013/03/10(日) 18:23:47.89
>>400
Select Caseこちらが最適ですね、、
勉強不足でした・・ありがとうございました。
402デフォルトの名無しさん:2013/03/11(月) 08:46:28.47
>>369
コマンドボタンじゃなくてチエックボックスにすればええやん
403デフォルトの名無しさん:2013/03/11(月) 09:09:51.00
>>377だけど
意見くれた人ありがとう。返事遅くなってすません。


>>380
元のxlsmのマクロシートで作成したものを、マクロを含まないシートに出力(xls/xlsx)して
配布するのが目的だったので提案の方法をしていたところ今回のことが発覚しました。
別名保存してもマクロを含まない新規ブックにコピーして渡してあげても駄目でした。

>>382
>>383が意見してくれていますがそういうことです。

>>384>>385>>386
開けないと言ったが、厳密に言うと開くのに時間が掛かってしまうというのが正しいですね。
エクセルが40%くらいで止まってしまう。
対象セルを1000〜2000にすると時間掛かるが開けるようになるのでPCのメモリも影響して
るのかも。
結果>>386の内容が影響してそうですね。解決方法はあるのだろうか。。
404デフォルトの名無しさん:2013/03/11(月) 11:07:21.50
開けない、と、開きにくい、の間には埋めることのできない隔たりがあるんよ
情報は正確に伝えないといかんよ
405デフォルトの名無しさん:2013/03/11(月) 12:00:29.73
>>404
申し訳ないです。次から質問するときは気をつけます。

今回の質問に関しては自分でもう少し調べてから出直してきます。
406デフォルトの名無しさん:2013/03/11(月) 22:12:38.55
うんちが漏れそうなのと、うんちが漏れたのとを比較すればイメージしやすいと思う。
407デフォルトの名無しさん:2013/03/11(月) 22:53:17.60
お、おぅ
408デフォルトの名無しさん:2013/03/12(火) 02:38:30.41
1行ずつスタイル指定するんじゃなくて、まとめて条件書式設定すれば良いだけの気がするが
409デフォルトの名無しさん:2013/03/13(水) 06:53:57.57
罫線で迷路を作るプログラムを教えて
410デフォルトの名無しさん:2013/03/13(水) 07:38:58.99
411デフォルトの名無しさん:2013/03/13(水) 08:21:04.68
思い出したけど
昔、「頭の体操」か何かで見た単純迷路がまさにそんな感じで
初めて見たときは感動したが
いまはVBAで簡単に出来るんだな
412デフォルトの名無しさん:2013/03/13(水) 08:21:38.51
罫線の迷路を解くプログラムを教えて!!!
413デフォルトの名無しさん:2013/03/13(水) 18:26:54.00
まず3方向に罫線があるセルを調べ4方向目に罫線を引いてセルを四角く囲う
そのセルを判りやすいように罫線と同じ色を塗る

これを繰り返せば、色を塗られてないセルがスタートからゴールへの道になる。
414デフォルトの名無しさん:2013/03/13(水) 22:40:28.02
>>413
そういうアルゴリズムがパッと浮かぶの凄いよな

単純にそのまま作ったらスゲー遅かった
行き止まり見つけたら逆順にたどって塗りつぶして行くようにしたら早くなった
415デフォルトの名無しさん:2013/03/14(木) 00:22:10.27
Excel2010、オートフィルタで複数列をORで抽出する方法ってあるか?
ApplyFilterの引数を見ても、1列のフィルタ適用のみで、1列内の複数値をAndやORや
複数値選択ができるのは分かるんだが。
よい知恵を貸して欲しい。無理ならあきらめる。
416デフォルトの名無しさん:2013/03/14(木) 01:19:28.61
馬鹿には無理
417デフォルトの名無しさん:2013/03/14(木) 07:38:37.16
つーか、Excelのオートフィルタは簡単だけど融通利かなすぎなので
俺は個人用マクロブックに、自作のフィルタクラスを作ってある

>>415もVBA始めたなら、既存の機能を呼び出すだけの初心者レベルは卒業して
自分で新規機能を作っていけるようになろうよ
418デフォルトの名無しさん:2013/03/14(木) 09:03:18.94
>>417
新規機能っていってもそれは既存機能の組み合わせだろうに。
初心者レベルの基準がアレだなw
419デフォルトの名無しさん:2013/03/14(木) 09:30:01.26
Excelオブジェクトが提供するメソッド使うか
VB構文が提供する関数などを使うかってことじゃね?
420デフォルトの名無しさん:2013/03/14(木) 12:47:15.12
Windows7、Excel2010です

改行位置に太い罫線を挿入するマクロが欲しいのですが
ググったら以下のマクロが出ました

Sub TEST()
Dim hpb As HPageBreak
ActiveWindow.View = xlPageBreakPreview
For Each hpb In ActiveSheet.HPageBreaks
Range(hpb.Location.Address).Resize(, 8). Borders(xlEdgeTop).Weight = xlThick
Next
ActiveWindow.View = xlNormalView
End Sub

これを使ってみたところページの上側に罫線が入ります
ページの下側に罫線を入れるにはどのようにしたら良いでしょう?
セルの下側に罫線を入れるのはBordersにxlEdgeBottomを入れればよいのはわかりました
あとは範囲の指定なのでRange(hpb.Location.Address)の所をだと思うのですが
どうしたら良いか全くわかりません

よろしくお願いします
421デフォルトの名無しさん:2013/03/14(木) 13:22:38.18
Sleep(720000)  (12分)
にすると、この12分間VBAは操作できなくなるし、なんか若干重くなるんだけど
この12分間VBAも止めさせる方法ってないの?

Exit Subで一回退去させてからの12分後復活みたいなことってできないの?
422デフォルトの名無しさん:2013/03/14(木) 13:59:54.82
>>415
VBA関係ないのでよそで聞いてください

>>420
Range(hpb.Location.Address).Offset(-1, 0).

>>421
そもそもVBAにSleepなんてないが何の事を言っているんだ
指定時間でプロシジャー実行したいならApplication.OnTime使え
423デフォルトの名無しさん:2013/03/15(金) 10:29:06.63
会社のWebシステム(たぶんイントラと言うのだろう)に
(1)ログインして
(2)テキストボックスにあるキーワードで検索して
(3)出てきたデータがあります。

これをExcelのシートにコピペみたいな感じでインポートするのを
全自動で行うことはVBAで可能ですか?

もし可能なら一般的にどういうコード、どういうステートメントを使うか教えていただきたいですが。
424デフォルトの名無しさん:2013/03/15(金) 10:37:31.76
それやるんだったら、直接DBにADOで接続してSQLでデータ取ってきたほうが楽じゃね?
システムがどうなってんのかは知らんけどさ
425423:2013/03/15(金) 11:08:29.25
>>424
レスありがとうございます。
ADOって何ですか?
426デフォルトの名無しさん:2013/03/15(金) 11:11:14.21
ActiveX Database Object
427デフォルトの名無しさん:2013/03/15(金) 11:16:42.79
つーかイントラネットでのことは、社内のシス管に聞けよ

マクロやプログラムによるログインの自動化とか禁止している場合もあるし
勝手にやると懲戒処分&損害賠償まで発展しかねない話だからな
428デフォルトの名無しさん:2013/03/15(金) 11:41:22.73
IEをVBSで操作するれば簡単にできそうだけど
429デフォルトの名無しさん:2013/03/15(金) 12:20:16.29
ここで問題になるのは、
技術的に実現出来るかどうか、
と、
それを実行して良いかどうか、
の違いだよね
430デフォルトの名無しさん:2013/03/15(金) 12:33:49.80
で、それを両方解決できるのが社内のシス管

そして少なくともここでは、後者については何も言えない
431デフォルトの名無しさん:2013/03/15(金) 12:43:13.47
ここでは技術的なことを語ればおk
432デフォルトの名無しさん:2013/03/15(金) 12:53:19.58
そうだね
特定社内の規則に関わることを話しても仕方ないから
そういうのが関わる案件は無視して
そういうのが関わらない案件について、技術的なことを語ればおk
433デフォルトの名無しさん:2013/03/15(金) 13:03:32.05
俺が思うにXMLで返してもらえばいいと思う
434デフォルトの名無しさん:2013/03/15(金) 15:55:53.02
フォームに入力、ボタンをクリック、ブラウザやダイアログに表示された文字列を取得、
技術的にはどれもVBAで可能だけど、状況によってはちょっと面倒なことになる場合もある

あと、その手のプログラムは絶対に自分だけで使うこと
わかってない他人に使わせると、絶対にトラブルを起こす
435デフォルトの名無しさん:2013/03/15(金) 16:09:43.04
REST APIを作ってもらえば楽
436デフォルトの名無しさん:2013/03/15(金) 22:15:33.58
CreateObject("InternetExplorer.Application")でいいじゃん
437デフォルトの名無しさん:2013/03/16(土) 05:39:11.89
VBAを学べる初心者用の良いサイト教えてください
438デフォルトの名無しさん:2013/03/16(土) 06:11:10.24
>>437
Office TANAKA
http://officetanaka.net/excel/index.htm
ここはまったくの初心者からは厳しいけど、入門レベルからならまとまってる。
しかしTANAKAさんの顔はオッサン顔とのうわさもあります。
439デフォルトの名無しさん:2013/03/16(土) 07:24:18.47
>>438
ありがとうございます
残念ながら私は全くの初心者です
一から学べるサイトはありませんか?
440デフォルトの名無しさん:2013/03/16(土) 07:27:13.10
>>439
「excel VBA 入門」くらいググれよクソが!
441デフォルトの名無しさん:2013/03/16(土) 08:49:12.99
ネットで済まそうとせずに素直に入門書本屋で適当に見繕って買えよ…
442デフォルトの名無しさん:2013/03/16(土) 10:15:10.06
直接DBにADOで接続するには
どんな手段でやりますか?
なにかソフトウェア使いますか?
それともVBAでできますか?
443デフォルトの名無しさん:2013/03/16(土) 10:58:08.35
>>442
なんでググらないの?
バカなの?
444デフォルトの名無しさん:2013/03/16(土) 11:26:32.77
だからここは知恵袋じゃねーって何度も言ってんだろーが!
445デフォルトの名無しさん:2013/03/16(土) 11:38:36.89
>>442
唱えよ「物をつくってください」
446デフォルトの名無しさん:2013/03/16(土) 12:06:41.56
VBAでも出来るかもしれないし出来ないかもしれないし
VBA以外でも出来るかもしれないし出来ないかもしれない
447デフォルトの名無しさん:2013/03/16(土) 12:20:46.72
いいか?
俺が先週まだ行ったことないラーメン屋に行ったときの話だ。

メニューに写真もなかったのでそこの店員にラーメンを注文しようとした時に何ベースのラーメンなんですか?と聞いたら店員はこう答えたよ。

『スープは企業秘密なんで教えられません』と。
俺は苦笑いで、そうですかと答えたよ。

まぁそういうことだ。
448442:2013/03/16(土) 12:22:29.74
>>445
物をつくってください

>>446
為せば成る
為さねば成らぬ何事も
成らぬは人の為さぬなりけり
449デフォルトの名無しさん:2013/03/16(土) 14:00:21.29
各データベース用のODBCドライバをインスコせよ。
以上終了
450デフォルトの名無しさん:2013/03/16(土) 14:03:56.38
成せば成る成さねば成らぬ何事も
それがロボットロボ根性
ロボコンロボット世界一
451デフォルトの名無しさん:2013/03/16(土) 14:13:14.66
VBA初心者ですが
Excel起動時に毎回VBEを開くのは手間なのですが自動で両方立ち上がるようにする事は出来ないのでしょうか?
452デフォルトの名無しさん:2013/03/16(土) 14:17:25.07
451の母です。
わたしも知りたいです。
いままでAlt+F11でやってましたがもっといい方法あるのかな。
娘を助けてあげてください。
453デフォルトの名無しさん:2013/03/16(土) 14:21:48.09
>>451-452
つ 個人用マクロブック

あとは>>1★5ってことで、自分で調べられるよな?
454451の母:2013/03/16(土) 14:24:27.81
>>453
Sub Auto_Open()のセクションに書くんだろうけど
なんて書くの?
VBEを開くコードなんてあるの?
455デフォルトの名無しさん:2013/03/16(土) 14:47:38.15
だから、それを調べろって
間違いなく出来る(検証済み)から

まあ女のフリしてゴネてれば、そのうちバカが釣られて
回答してくれるかもしれないけどなw
456デフォルトの名無しさん:2013/03/16(土) 16:01:13.60
馬鹿発見
457デフォルトの名無しさん:2013/03/16(土) 16:01:33.37
在日発見
458デフォルトの名無しさん:2013/03/16(土) 16:43:13.95
御託はいいからさっさと
VBEを自動で立ち上げる方法を解説したページのURLを貼れば良いんだよ!
459デフォルトの名無しさん:2013/03/16(土) 16:44:10.45
一体いつまで待たせる気だ!!!!!!!!!!!!!
460デフォルトの名無しさん:2013/03/16(土) 16:52:29.49
朝鮮人は気が短い
461デフォルトの名無しさん:2013/03/16(土) 17:25:29.97
>>448
>>445に「物をつくってください」って言ってもしょうがないだろ
VBAに言えよ
462デフォルトの名無しさん:2013/03/16(土) 18:40:24.30
>>423
あー、よく使ってるよ。
末端ユーザーでも、システムの機能をお手軽に追加できるのがよいとこ
だよね。

ホントは、この方法だと、自動とはいえ、抽出に時間かかるから、DBから直
接とってきたいとこだけど、そのDBの構造がブラックボックスの場合は、
これしか手段がない。

やり方は、ネット検索すれば、いろいろでてくると思う。
463デフォルトの名無しさん:2013/03/16(土) 18:47:42.47
機能追加やDB抽出お願いしても、SEに「時間がない」だの「技術的に難しい」
だの、言われたときの事務屋の最終手段がVBAによるWebシステム自動操作。

おかげでそこらの保守SEより、コードをいっぱい書いてる気がする。
464デフォルトの名無しさん:2013/03/16(土) 20:44:11.05
>>463
どうやってやるのかヒントでも教えていただけないでしょぅか?
465デフォルトの名無しさん:2013/03/16(土) 21:00:44.59
馬鹿には無理
466デフォルトの名無しさん:2013/03/16(土) 23:13:24.33
InternetExplorer.Application
DOM操作
スクレイピング
467デフォルトの名無しさん:2013/03/17(日) 00:38:40.63
>>464
>>1 ★3に抵触しているような気もするけど、ヒントなら。
「IE」と「VBA」で、ググれば、サンプルコードはいっぱいある。

あとは、Webシステムのhtmlコードから、各ボタンの名前を読み取る。
コードを読ませないよう右クリック禁止のシステムは多いけど、それこそ
VBAによって、すり抜ける方法はある。

末端ユーザーかな?なら、テスト環境もないだろうから、本番でイキナリ
試すしかないけど、照会ならともかく、登録やるときは、慎重にね。
468デフォルトの名無しさん:2013/03/17(日) 01:15:00.50
VBAの解説サイトで●●を多用すると大変になるとか書かれているのを目にする事がよくありますが
目的の結果が得られるかどうかが大事であって大変かどうかはプログラミングを組む上で
思考の妨げになるだけではないかと思うのですが一体何なのでしょうか?
469デフォルトの名無しさん:2013/03/17(日) 01:18:19.96
なお、htmlコードが読み取れず、各ボタンや、テキストボックスの名前が
分からなくとも、その見たまんまの名称や、何番目に出てくる要素なのか
を探れば自動操作は可能。

が、多少めんどい。
470デフォルトの名無しさん:2013/03/17(日) 01:29:00.08
自分のコードも書いて3日経てば他人のコードっつってな、
自分で書いたコードもちょっと経ってから見ると分かり辛いんだよ
目的の結果が得られる事が最重要ではあるけど、それだけじゃ全然駄目
471デフォルトの名無しさん:2013/03/17(日) 01:31:25.50
変数名に日本語も使いだしたら後のメンテナンスが楽になった
472デフォルトの名無しさん:2013/03/17(日) 01:36:19.04
変数宣言の必要の無い言語で日本語使うと
表記揺れが原因でエンバグしそう
473デフォルトの名無しさん:2013/03/17(日) 02:05:51.09
Access 2.0のAccess Basicで変数名とかに
全角のスラッシュを使ってるシステムがあって
バージョンアップのとき大変なことになったなー
474デフォルトの名無しさん:2013/03/17(日) 03:40:02.90
VBは文法がプログラミングを組む上で
思考の妨げになるのでははないかと思う
475デフォルトの名無しさん:2013/03/17(日) 03:48:05.55
未来の自分が他人なら遠慮する必要は無いな
476デフォルトの名無しさん:2013/03/17(日) 05:34:01.81
まあ相手が顧客じゃなく自分なら、遠慮は「必ず要する」わけではないけど
遠慮しておかないと泣くのも自分だからなw
俺も初心者の頃、とにかく早く完成させることだけを目指して、何の配慮もせずにコード書きまくって
あとでちょっとした機能追加しようとした時にもわけわからん状態で泣いたことが何度有ったことかw
477デフォルトの名無しさん:2013/03/17(日) 08:07:22.94
>>471
ああ、自分もオブジェクト名・変数名は日本語だわ。
英字だと、コードを開くたびに、この変数は何だっけとなってしまう。
やはり俺は日本人なんだな。
478デフォルトの名無しさん:2013/03/17(日) 08:12:47.05
未来の他人が自分なら遠慮しといた方が良い
479デフォルトの名無しさん:2013/03/17(日) 09:31:20.25
このスレって、もしかしてシステム会社の職業SEが多いのか?
VBならともかく、VBAは、事務屋がよく使うもんだと思っていたのだけど。
480デフォルトの名無しさん:2013/03/17(日) 09:39:37.43
おれは前者だよ
本体の周辺ツールとしてEXCELが絡んでるから
481デフォルトの名無しさん:2013/03/17(日) 09:50:24.42
昔の社内SE w
ホストからデータ落としたのをExcelで帳票にしてくれ〜なんて依頼多かったよ w
今はその時に覚えたVBAで自分の趣味のものをちょこちょこ作ったりしてる
482デフォルトの名無しさん:2013/03/17(日) 10:11:06.05
社内SEなら、VBAを必要とするのも分かる。
ウチは、社内SEがいないから、事務屋の自分がやるしかない。

契約している別会社の保守SEはいるし、データ抽出やデータ登録も契約に含
まれているはずなのだが、頼んでも、時間的にムリとか、難しいからムリ
とかよく言われる。

なら、自分で作るからデータベースの仕様書よこせ と、いえないところが、
パッケージシステムの哀しいところ。

何千件もの手動登録は論外なので、しょうがないから、自分でWebシステム
を自動で動かすコード作って、エクセルにコピペしたデータをシステムに
流し込んでる。
483デフォルトの名無しさん:2013/03/17(日) 10:24:50.23
EXCELはDBとしても使えます(キリッ)
484デフォルトの名無しさん:2013/03/17(日) 10:38:19.23
俺は業務課だぜ。
485デフォルトの名無しさん:2013/03/17(日) 10:52:00.32
みんな苦労してるね。自分も事務部門だ。
不況で外注予算が大きくカットされちゃって
データ加工程度の目的だと自分でやるしかないの…シクシク

自分でやってバグを出すと大変なことになるから
自分の実力と結果検証の容易性との兼ね合いを測りながら
仕様決め・開発するのに凄く神経を使う。
ユーザー開発に手当が出ないのは理不尽だ。
486デフォルトの名無しさん:2013/03/17(日) 11:10:02.96
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=cells(1,1)"

条件付書式で値をセルで指定するにはどのようにしたらよいでしょうか。
487デフォルトの名無しさん:2013/03/17(日) 11:15:04.05
フィルター済みで非表示の行が多いシートに
他シートの長方形の領域のデータをそのままコピペするためのコードは
どうなりますかな?
488デフォルトの名無しさん:2013/03/17(日) 11:15:21.89
>>486
質問の意味がよくわからん
やりたいのはこういうこと?

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=" & Cells(1, 1)
489デフォルトの名無しさん:2013/03/17(日) 11:15:26.45
馬鹿には無理
490デフォルトの名無しさん:2013/03/17(日) 11:15:37.00
>>486
どうやるか分からないときは、マクロの記録をとってみるといいよ。
491デフォルトの名無しさん:2013/03/17(日) 11:16:11.81
>>487
簡単にやる方法はないので、1行ずつループして、Visibleを調べながらコピー
492デフォルトの名無しさん:2013/03/17(日) 11:16:45.52
俺には無理
おまえにも無理
493デフォルトの名無しさん:2013/03/17(日) 11:18:07.30
494デフォルトの名無しさん:2013/03/17(日) 11:18:52.92
みんなやさしいなあ
495デフォルトの名無しさん:2013/03/17(日) 11:20:02.46
>>487
特定の条件の行にデータを入れたいならコピーじゃなくてVLOOKUPあたりで代用できそうな気がする
496486:2013/03/17(日) 11:27:06.90
>>488
ありがとうございます。これでできました。
497デフォルトの名無しさん:2013/03/17(日) 14:07:31.46
>>485
事務系の人もちゃんとバグのリスクとか検討してるんだね
498デフォルトの名無しさん:2013/03/17(日) 16:35:40.39
セル範囲のコピーについてですが、
転記先.Cells(2, 1).Select
だと、正常に選択できるのですが、
lRow = 転記元.Cells(Rows.Count, 1).End(xlUp).Row
転記元.Range(Cells(4, 2), Cells(lRow, 8)).Copy Destination:=転記先.Cells(2, 1)
でコピーしようとすると実行時エラー1004が出ます
転記先と転記元は別のブックになっています

なぜエラーになるのでしょうか?
499デフォルトの名無しさん:2013/03/17(日) 17:14:54.46
こうしたらうごくの?
lRow = 転記元.Cells(転記元.Rows.Count, 1).End(xlUp).Row
転記元.Range(転記元.Cells(4, 2), 転記元.Cells(lRow, 8)).Copy Destination:=転記先.Cells(2, 1)
500デフォルトの名無しさん:2013/03/17(日) 17:30:04.13
>>499
ありがとうございました
うごきました
転記元.Range(Cells(4, 2), Cells(lRow, 8)).Select
では正常にSelectされたので見落としてました
501デフォルトの名無しさん:2013/03/17(日) 17:32:46.66
>>497
事務系だと、管理者権限や、データベースの仕様書、テスト環境すらないからねえ。
かといって、手動による気のめいる登録作業なんかで残業はしたくないから、
自分でやるしかない。

特にWebシステム自動操作による登録作業は、バッチを流すに等しい作業な
わけで、とても気を使う。

というか、システム部門が不甲斐なさすぎる。
銀行の統廃合により、何千件もある銀行コードを手動で修正しろとか、
言われた日には、シメたくなった。

さすがにこんなんまで、コード作成してやってられないから、
(簡単にできることはできるが、アホらしくて、意地でもしたくない)
担当者に、手動はありえんだろうといって、考え直させた。
502デフォルトの名無しさん:2013/03/17(日) 17:40:00.75
>>500
>転記元.Range(Cells(4, 2), Cells(lRow, 8)).Select
>では正常にSelectされたので見落としてました

「転記元」シートがアクティブならいいけど
違うシートがアクティブだったならエラーになるはず
503デフォルトの名無しさん:2013/03/17(日) 20:04:03.57
仕事なのに何甘えてんだよ
つべこべ言わずにやれよ
504桃白白:2013/03/17(日) 20:46:31.65
>>501
桃白白を雇え。銀行コードを入力するだけなら桃白白にまかせろ。
505デフォルトの名無しさん:2013/03/17(日) 20:54:30.76
お、桃白白もsage覚えたのか?
それとも偽物か?

まあ仮に偽物だとしても「本物だ」って言うんだろうけど
506デフォルトの名無しさん:2013/03/17(日) 22:14:06.32
SEの権限なら簡単なSQLで片付くとわかっているのに、なんで手動で何千件も
登録しなきゃいけないんだよ。

自分だけならSQLの実行権限なくとも、VBAで簡単にすませられるけど、それが
できないヨソの事務職が大迷惑なんだと、マジレスしてみる。

いや、無駄な残業代で稼ぎたいっていうなら、手動でやってもいいかもだけど。
507デフォルトの名無しさん:2013/03/18(月) 00:12:58.43
VBA初心者ですが
' をつけてコメントをつけられるようですがこは沢山書きすぎると処理が遅くなったりするのでしょうか?
速くするために最終的には消した方がより速くなるのでしょうか?
508デフォルトの名無しさん:2013/03/18(月) 00:46:44.11
遅くなるよ

ここ数年くらいのパソコンだと、コメントを1000000行書いて
0.001秒遅くなるかどうかってくらいだけど

つまり、厳密に言えば遅くなるけど、非常識なほど多くのコメントを書いても
体感できない程度の差なので気にする必要なし
509デフォルトの名無しさん:2013/03/18(月) 00:49:06.75
自分で時間測ればいいじゃん、処理開始前と処理開始後の経過時間の差分でわかるでしょ
510デフォルトの名無しさん:2013/03/18(月) 00:49:46.38
ワロタ
511デフォルトの名無しさん:2013/03/18(月) 01:30:51.62
バカみたいな手作業でも給料くれるんなら、俺そんな会社で残業したいわ
こっそりVBA回しながらスマホで2ちゃんねるとyoutube見てればいいんだから

手作業のスピードが出るように

For 〜
  Replace 〜
  Sleep 5000
Next

とかやればいいんだろ?
512デフォルトの名無しさん:2013/03/18(月) 01:42:07.33
>>511
公務員
513デフォルトの名無しさん:2013/03/18(月) 01:44:26.68
つか、なんで残業とかいう話になるかわからん
今日で終わらなかったら、明日やれよ
そんだけ時間がかかるんだろ?
514デフォルトの名無しさん:2013/03/18(月) 01:48:23.34
>>513
締め切り
515デフォルトの名無しさん:2013/03/18(月) 01:49:26.04
本当に違いが出るか調べてみた
使ったのは2010の64bit版、Win7、メモリ8GBのマシン

まずはジャブ、1万行のコメントをテキストエディタのマクロでサクっと作ってVBEにコピペ
結果、コピペ前と実行時間変わらず、誤差以下で測定できず

次に本番、百万行のコメントを以下略、
結果、貼り付けた瞬間VBEが落ちて計測不能でした
というわけで>>508は嘘ということが判明しました
コメントは1000000行書けません

VBEのコードサイズの制限ってどこかに書いてあったっけ?
516508:2013/03/18(月) 02:19:25.98
×コメントは1000000行書けません
○コメントは1000000行分貼れません

だろ。やっても無い事書くなクズ。
517デフォルトの名無しさん:2013/03/18(月) 03:26:16.82
1行3バイトとして100万行だと30メガバイトのソースになるけど、
VBEって1モジュール64Kぐらいが限界だと勝手に思い込んでた
518デフォルトの名無しさん:2013/03/18(月) 03:29:37.88
>>508は100万行のソースで遅くなるかどうかをいっぺん自分で確かめてみるといいよ
たぶん予想外の結果になるから
519デフォルトの名無しさん:2013/03/18(月) 03:46:38.70
>>514
その締め切りではできませんってなんで言えないの?
無理な締め切りでもやっちゃう馬鹿がいるから、次も無理な締め切り押し付けるんだよ
ちょっとは考えろ
520デフォルトの名無しさん:2013/03/18(月) 03:56:01.72
>>519
動かせない締め切りというのが世の中にはありまして
521デフォルトの名無しさん:2013/03/18(月) 05:03:58.65
>>520
何が言いたいんだお前は。
時間が足りないのなら人増やさせるか、別の手段を考えさせろよ。
522デフォルトの名無しさん:2013/03/18(月) 05:53:07.90
ブラックvsホワイト
523デフォルトの名無しさん:2013/03/18(月) 07:02:33.70
正論振りかざすのは気持ちいいだろうけど
世の中強者ばかりじゃないのに・・・
524デフォルトの名無しさん:2013/03/18(月) 07:12:46.40
相手を叩けば、自分が偉くなると勘違いしてる奴が多いからな、2chには

と嘆いてみる
525デフォルトの名無しさん:2013/03/18(月) 07:36:58.38
バイトでもできる仕事で給料貰えて、しかも残業代までゲットできる方が強者ですね、わかります
526デフォルトの名無しさん:2013/03/18(月) 07:42:28.58
つか、嫌な仕事させられてかわいそうだねーとか
君の上司って無能だよねーとか、そんなこと言って欲しいの?
ガキかよ
527デフォルトの名無しさん:2013/03/18(月) 07:42:38.82
>>521
公務員増やすと国民の声がうるさいんです。
528デフォルトの名無しさん:2013/03/18(月) 07:46:17.02
いや、周りの事務職連中は無能だが、俺はVBAでちゃちゃっとかたずけられるぜっていう自慢をしたいんでしょ。
529デフォルトの名無しさん:2013/03/18(月) 07:47:47.89
うわ、なんかこいつ腹立つわ。
公務員だから、生産性あげる努力なんかしませんってことかよ。
530デフォルトの名無しさん:2013/03/18(月) 07:53:26.57
公務員は予算を使い切り、次年度の予算を増やすのが仕事です。
531デフォルトの名無しさん:2013/03/18(月) 07:54:41.56
万が一にも生産性を上げて予算を余らせるようなことになると、出世が危うくなるのです。
532デフォルトの名無しさん:2013/03/18(月) 08:08:51.93
これはまた、でかい釣り針ですな
533デフォルトの名無しさん:2013/03/18(月) 11:40:40.90
>>482
> なら、自分で作るからデータベースの仕様書よこせ と、いえないところが、
> パッケージシステムの哀しいところ。

システム担当者以外に仕様をあかしたり、データベース操作権限を与えたりする方が怖いんじゃないの?
534デフォルトの名無しさん:2013/03/18(月) 14:07:51.60
>>482
その場合は契約違反を通報するところから始めるのが筋では?
まずは上司に

データ抽出を結局やってもらえなかったとしても、うまく交渉すれば保守費を値切れる可能性も出てくる
535デフォルトの名無しさん:2013/03/18(月) 14:11:34.45
上のような書き込みを見ると、喩え社内向けWebアプリケーションでも、CSRF対策なんかを
きちんとやる必要があるなぁと思うね。
536デフォルトの名無しさん:2013/03/18(月) 22:16:59.39
そんなのあたりまえでしょ
537デフォルトの名無しさん:2013/03/18(月) 22:43:31.05
なんか知らんうちに、他の人がどんどん回答してる・・・。
釣られないようにね。

>>533
建前上はそう。でも、結果的に何千件もの手動作業が発生するようでは、
本末転倒。システム担当者以外に仕様があかせないのは、まあ当然なので、
ユーザーとしては、それをすり抜ける方法を探すしかない。

>>534
軽微なデータ抽出はするという文言なので、何が軽微かを決めるのは、
SEになる。こちらが軽微だろうと思ってても、SEの裁量で断られる。
数十万程度の保守費なら、まあそれでも納得するけど、そんなレベル
じゃあないから、納得いかない。

>>535
正規の権限でログインしている場合に、その対策は効果あるのか?
538デフォルトの名無しさん:2013/03/18(月) 23:09:52.02
>>537
>なんか知らんうちに、他の人がどんどん回答してる・・・。
>釣られないようにね。

誰だよおまえ
539デフォルトの名無しさん:2013/03/18(月) 23:31:45.63
540デフォルトの名無しさん:2013/03/18(月) 23:35:31.76

書き込み出来なかったのでおかしなの入れてしまいました。

質問です。
1 satou
2 satou
3 satou
4 yamada
5 yamada
6 satou
7 yamada


上記を
1-3,6 satou
4,5,7 yamada

と置き換えるにはどのようにすれば良いでしょうか。
1個ずつIFで確認?

また上記の逆も出来れば嬉しいです。
541桃白白:2013/03/18(月) 23:42:51.58
>>540
ナイスクエスチョンだ。そうだな、桃白白なら一個ずつIfで確認してDictionaryか
何かに放り込む。
542デフォルトの名無しさん:2013/03/19(火) 01:10:56.73
VBA初心者ですが
VBAを駆使して何もかもが自動で計算処理される無人の会社を作ることは可能なのでしょうか?
543デフォルトの名無しさん:2013/03/19(火) 02:15:43.63
はい
544桃白白:2013/03/19(火) 03:23:49.61
545デフォルトの名無しさん:2013/03/19(火) 03:33:20.12
電話応対もVBAで出来るのでしょうか?
546桃白白:2013/03/19(火) 03:54:57.95
>>545
ACCESSで通話時間を管理するシステムなら見たことある。
何時何分に何番から電話がかかってきて通話時間がこんだけだったってのを
データベースに追加していくやつ。
547420:2013/03/19(火) 08:42:16.94
>>422
思うとおりに動きました!ありがとうございました。
548デフォルトの名無しさん:2013/03/19(火) 10:34:26.28
>>544
会心という割には微妙な気がする。
宿題スレならこれでいいと思うけど。
549デフォルトの名無しさん:2013/03/19(火) 10:39:56.51
ドラクエの「かいしんのいちげき」は
 (a) 会心の一撃
 (b) 快心の一撃
 (c) <その他>
のどれですか?
550桃白白:2013/03/19(火) 11:48:46.01
>>548
どこがよ?桃白白が全力を注いだ会心の作なんだよ。
心外、桃白白心外。そして絶妙。
551デフォルトの名無しさん:2013/03/19(火) 12:41:22.90
会心の作=出来が良い
ではないからな

初心者の会心の作は出来が悪いし
ベテランの凡作は、初心者の会心の作より遙かに出来が良い

本人が会心の作というからには会心の作には違わず
そしてそれが、そいつの実力の限界ってことだ
552デフォルトの名無しさん:2013/03/19(火) 13:47:41.42
553デフォルトの名無しさん:2013/03/19(火) 13:57:03.08
>>552
内容関係無いけど、revertってなんかニュアンス違う気がする。
展開っぽい単語使った方が好み。revertの元が無い場合もあるから。
554デフォルトの名無しさん:2013/03/19(火) 18:31:56.60
お願いします。

A列に、「テニス」「野球」「ゴルフ」
B列に、「サッカー」「テニス」「ゴルフ」「スキー」

というデータがあり、

C列に、=IF(COUNTIF($A$1:$A$3,B1)=0,B1,"")
という計算式を入れてます。

A列になくて、B列にある競技をC列に表示させる式のつもりなのですが、上手く動作しません。
ここでは、サッカーと、スキーだけをC列に表示させたいです。



C1のセルに=IF(COUNTIF($A$1:$A$3,B1)=0,B1,"")
C2のセルに=IF(COUNTIF($A$1:$A$3,B2)=0,B2,"")
C3のセルに=IF(COUNTIF($A$1:$A$3,B3)=0,B3,"")
C4のセルに=IF(COUNTIF($A$1:$A$3,B4)=0,B4,"")
というデータが入っているのですが、なぜかC1〜C4すべてのセルにC1の値が入ってしまいます・・・
ここでは、「サッカー」が全てのセルに入るという感じです。


ちゃんと、C1にサッカー、C2に空白、C3に空白、C4にスキーが入るようになりませんでしょうか?
555デフォルトの名無しさん:2013/03/19(火) 18:32:33.40
>>548
どこが微妙なの?いいと思うんだけど。後学のために教えて!
556デフォルトの名無しさん:2013/03/19(火) 19:15:10.73
>>554

Excel総合相談所 108
http://toro.2ch.net/test/read.cgi/bsoft/1362819177/l50


それともそれをVBAでやりたいってのか?
557デフォルトの名無しさん:2013/03/19(火) 19:37:19.03
>>553
こっそり変えたった
558548:2013/03/19(火) 20:06:14.33
>>555
>>550
細かいこと言っていたらキリがないのでポイントとなるところだけ。

・コメントが一切ない。
 Matomeru()のローカル変数value1、value2、stateって何?
 っていうかMatomeru()はどのように数値をまとめるのか概要がわからない。

・GetSouce()で"satou"、"yamada"しか設定していない。
 >>540の内容をそのままやってるだけ。
 学校の宿題ならこれでいいと思うけど、やりたいことは同じ名前のものをまとめたいことだと思う。
 "satou"、"yamada"しか纏められないツール作っても何も嬉しくない。

・マジックナンバーの多用
 一番気になるのはMatomeru()の中のSelect Case ステートメント。
 stateの値によって条件分岐してるけど、どういう状態なのか見ただけでは全くわからん。
 前後のコードを解読しないと解らないというのは、メンテの面でよろしくない。
 こういうのをコメントで対応するというのを見るけど、修正していくうちにコメントの修正を
 忘れたりするからConstステートメントできちんと名称をつけておくと可読性が上がる。
559桃白白:2013/03/19(火) 20:26:48.44
>>558
もうやめて。
560桃白白:2013/03/19(火) 20:31:29.11
       ___
      /     \
    /        \  桃白白超怒られた
    /::::::           ヽ  >>552には勝てる気がしないしさ
    |:::::          i  空きれい
    ヽ:::        __/
    /::::        \
    |:::         _)
    |::::         i
    \___、_____  ノ _)
561デフォルトの名無しさん:2013/03/19(火) 21:40:01.49
>>552
https://friendpaste.com/6rE28h8JgRxSQ0CF5jH3eZ
コメントいれながら見直してみた
562デフォルトの名無しさん:2013/03/20(水) 00:19:47.67
counterの値で分岐するところ、Else IfじゃなくてCaseを使いたい
563デフォルトの名無しさん:2013/03/20(水) 05:14:03.31
VBAでクラスの継承や、
Linq、ラムダ式等の.NetFreamworkの
機能を使える様にするには
どうすれば良いですか?
564デフォルトの名無しさん:2013/03/20(水) 06:09:06.84
コンボボックス(ActiveXコントロール)に項目(値と表示)を追加するにはどうしたら
いいんでしょう?

Worksheets(1).ComboBox1.AddItem あああ
Worksheets(1).ComboBox1.AddItem いいい

みたいな方法だと 値=表示 になってしまいますが、表示と値(コードとか)を別にしたいです。
(「あああ」を選ぶとValueが「1」、「いいい」を選ぶとValueが「2」)

htmlで言うところの↓こんな感じです。
<select>
<option value="1">あああ</option>
<option value="2">いいい</option>
</select>
565デフォルトの名無しさん:2013/03/20(水) 06:30:10.09
馬鹿には無理
566デフォルトの名無しさん:2013/03/20(水) 07:36:32.14
>>564
値=表示はなぜダメなのかな。
数値でやると何を選択したのかコードが解りにくくなると思うけど。
567デフォルトの名無しさん:2013/03/20(水) 07:45:10.28
>>564
ItemDataプロパティ

但し、組み込みのActiveXコントロールはItemDataプロパティが無いタイプだったはず
でもフリーでItemDataプロパティ使える外部ActiveXコントロールのComboBoxあるからそれ使え
外部ActiveXコントロールの使い方はググれ

あるいは連想配列とかに値を格納しておく手もある
' 値の格納
ComboBox1.AddItem "あああ"
Collection1.Add 1, "あああ"
' 値の取得
変数 = Collection1(ComboBox1.Value)

更にそれを発展させて、ComboBoxクラスを作っても良し
Public Sub SetControl(TargetComboBox As MSForms.ComboBox)
で、対象のコンボボックスをクラスのモジュールレベル変数に参照代入して
Public Sub AddItem(Text As String, Value As Variant)
で上記のようにコンボボックスとコレクションにそれぞれ値を格納して、あとは
Public Property Get ItemData(Key As String) As Variant
  ItemData = mCollection(Key)
End Property
Public Property Get SelectionItemData() As Variant
  SelectionItemData = mCollection(mComboBox.Value)
End Property
で任意の値や選択中の値が取得できる


>>563
基本的に無理
ある程度は擬似的に実装できないことも無いが、擬似的な実装を途中まで組み上げてから
質問に来るならまだしも、全く手も付けずに質問に来るレベルの奴には無理だろう
568デフォルトの名無しさん:2013/03/20(水) 07:54:44.34
>>564
ComboBoxで選択した行をListiIndexで取得
得られた値を元に表示したいものを選択する
569デフォルトの名無しさん:2013/03/20(水) 09:57:51.84
質問です
シート1に換算値データベースがあります
シート2に比較用のデータがA列とB列にあります
シート2のA列、B列のそれぞれのデータの換算値をシート1から取得し
換算値B'-A'の計算をFor文で回したいのですが
それぞれの値を変数に格納する方法は思いついたのですが、
他に良い(動作が軽い)方法はないでしょうか?
570デフォルトの名無しさん:2013/03/20(水) 10:19:32.24
>>589
とんでもない行数のプログラムにするとか画面遷移だらけとかにしない限り
体感速度は大して変わらんのでは
思ったとおり作ればいい
変数に格納するよりかシートから直接参照したらだめなん?
571デフォルトの名無しさん:2013/03/20(水) 10:20:36.18
おっとまちがえた >>569ねごめん
572デフォルトの名無しさん:2013/03/20(水) 12:40:25.99
>>564
Sub 初期化()
Dim list(2, 1)
list(0, 0) = "あああ"
list(1, 0) = "いいい"
list(2, 0) = "ううう"
list(0, 1) = 1
list(1, 1) = 2
list(2, 1) = 3
ComboBox1.list = list
End Sub

Private Sub ComboBox1_Change()
If ComboBox1.ListIndex < 0 Then Exit Sub
MsgBox "選択した内容:" & ComboBox1.list(ComboBox1.ListIndex, 0) & " 値:" & ComboBox1.list(ComboBox1.ListIndex, 1)
End Sub
573デフォルトの名無しさん:2013/03/20(水) 12:48:19.26
>>569
EXCELやめてACCESS使う
VBAやめてVLookupと計算式でシートで完結させる
どっちにしてもこのスレの範囲外だな

EXCELとVBAでやりたいなら、どっちのシートもまとめて2次元配列にぶちこんで
それを操作するのがたぶん一番早いかと
>>570
シートのデータ参照は遅いので、ある程度のデータ量だと結構な差がでるぞ
574桃白白:2013/03/20(水) 13:13:45.02
>>569
Collectionでルックアップテーブルをこしらえちゃったらいいと思うの。
https://friendpaste.com/4xnXWe4jHcyvypiAPDatqe
575デフォルトの名無しさん:2013/03/20(水) 16:43:15.54
>>567
そうですか。ありがとうございます。
環境下に.Netインストールして.Net側で作ったクラスを呼び出せばいいだけなので別に
疑似的に作る必要性も感じないのでそこまではいいです。
576デフォルトの名無しさん:2013/03/20(水) 22:04:55.63
VBA初心者ですが
ふとサンプルコードを見ていて発見したのですが
プロシージャの呼び出しで
プロシージャ名を書いただけの場合は行ったきりで帰ってきませんが

Callをつけて

Call 名前


End Sub

Private Sub 名前()



にするとプライベートサブの命令が全部終わると元のプロシージャへ戻るようですが
こんなルールは一体何の所何を見ればわかるのでしょうか!?
これを知らなかったがためにえらい苦労しました・・w
Excelを解説しているサイトを3つぐらい見ながら基礎を勉強しましたが
この説明は書かれていませんでした 残念無念。
577デフォルトの名無しさん:2013/03/20(水) 22:25:08.80
>>576
残念無念なのはお前の頭
Callを付けずにプロシージャ名だけで呼んでも戻ってくる
以下サンプル

Sub a()
  Debug.Print "a1"
  b
  Debug.Print "a2"
  Call b
  Debug.Print "a3"
End Sub

Sub b()
  Debug.Print "b"
End Sub
578デフォルトの名無しさん:2013/03/20(水) 22:25:11.32
え?
579デフォルトの名無しさん:2013/03/20(水) 22:25:29.51
はい?
Callを付ける付けない、引数を括弧で括る括らないで、
引数が参照型になるか値型になるかに影響が出ることはあっても、
呼び出し元に戻らない事なんてあるんですか?
再帰呼び出しでもしているか、End SubのSub部分が抜けたりとかしていませんか?
580デフォルトの名無しさん:2013/03/20(水) 22:31:44.42
>>576
バカで間抜けでチンカス
581デフォルトの名無しさん:2013/03/20(水) 22:43:09.71
こうすれば戻らないよ。

Sub a()
  Call a
End Sub
582デフォルトの名無しさん:2013/03/20(水) 22:47:36.16
>>569
シートをテーブルと見立ててSQLを投げる
583デフォルトの名無しさん:2013/03/20(水) 22:49:36.82
>>581
戻らないけどスタックがオーバーフロー起こして落ちるよ
584デフォルトの名無しさん:2013/03/20(水) 22:53:57.85
>>577
>>579
>>580
>>581
まだ経験が浅い物で
最初に作った物が相当入れ子になっている物でしたので
テストしたコードがまずかったようです。
プロしジャー名だけでも戻るなら簡単ですね
585デフォルトの名無しさん:2013/03/20(水) 22:58:02.94
>>583
マジレスすな
586584:2013/03/20(水) 23:23:35.91
帰ってこない原因がわかりました

Dim Name As String
Dim Number

Name = Number & (Range("A7") + 1)
Application.Run Name
End Sub

このように条件に応じてApplication.Run を使って次のプロシージャへ飛ばしていました
この場合帰ってこないようです
587デフォルトの名無しさん:2013/03/20(水) 23:34:35.72
>>576
それはルールというより構造化プログラミングの基礎じゃないかと。
VBA以前の話だから、サイトであまり詳しく記載していないと思う。
588デフォルトの名無しさん:2013/03/20(水) 23:36:16.32
>>586
Nameは予約語だから変数で使っちゃダメ。
589デフォルトの名無しさん:2013/03/20(水) 23:53:49.09
Nameは予約語じゃないぞ
子メンバとしてはよく使われる語句だけど
親オブジェクト.Nameで使われるだけなら
Nameという名の変数とは全く干渉しない

まあ変数で使わない方がいいのはその通りだが
予約語だからってのは間違いなので、一応突っ込んでおく
590デフォルトの名無しさん:2013/03/20(水) 23:59:50.82
591デフォルトの名無しさん:2013/03/21(木) 00:09:45.09
残念、問題ない
592デフォルトの名無しさん:2013/03/21(木) 00:11:53.73
>>586
CallとRunはまったく違う
593デフォルトの名無しさん:2013/03/21(木) 00:15:53.37
つーかVBE使ってるなら予約後はエラーで赤文字になるだろ。
そうならないものなら、使わない方が良いものはあっても使っちゃダメなものは基本的に無い。
594デフォルトの名無しさん:2013/03/21(木) 00:25:07.78
GoSubとGoToの違いだな
595デフォルトの名無しさん:2013/03/21(木) 00:26:46.17
>>586
いやApprication.Runでも戻ってくるよ。
596デフォルトの名無しさん:2013/03/21(木) 00:30:20.36
>>593
たとえば、これは2行ともエラーになるけど

Sub aaa()
  Dim If As Integer
  Dim For As String
End Sub

こんなのはエラーにならないんだよな

Sub aaa()
  Dim Range As Integer
  Dim Cells As String
End Sub

じゃあ使ってもいいと思うか?誰だってやめろと言うと思うが
597デフォルトの名無しさん:2013/03/21(木) 00:32:16.26
その前に変数名の頭文字が大文字なのは嫌い
598デフォルトの名無しさん:2013/03/21(木) 00:36:21.13
変数名を既存のメソッドやプロパティと同じにするのは、GoToを使うなってのと同レベルの話
仕様上は可能でも「行儀が悪い」
599デフォルトの名無しさん:2013/03/21(木) 00:51:45.59
行儀が悪いのと予約語かどうかは別問題だとは思うけど、
クラスやメソッド、プロパティの名前の付け方に
ここまで無頓着なのは、旧VBやVBAだから許されるんだよな。
JavaやC#、今のVBでそんなこと話していたら周りから失笑されるレベル。
600デフォルトの名無しさん:2013/03/21(木) 01:50:22.07
それと、Nameと言う名前を付けちゃいけないのかと言うと場合にもよるがそんなことはない。
例えば何かクラスを作ったとして、それに名前を持たせたい場合、Nameプロパティを持たせるのは
ごく普通にある話。
他のクラスにもNameと言うプロパティを持たせておいて、同じ様に名前を取得する読み取り専用の
プロパティにでもしておけば、インターフェース使えば別の型のクラスから同じコードでそのクラスの
名前を取得出来る。

て言うか、クラス扱うなら基本中の基本の話だから。
クラス単位で定義されているだけだから当然予約語ではないし、
その辺が理解出来ていないとこれ以上話しても意味がない。
601デフォルトの名無しさん:2013/03/21(木) 01:54:33.84
質問させてください。
OS:XP
Ver:2010
モジュール:firestorage.jp/download/2ea5a67d8415505695ea32e683aac76d6eabf535
実行すると、Function シート2の
.Font.ThemeColor = xlThemeColorDark1
でエラーになります。エラー回避の方法を教えていただけますでしょうか?
602デフォルトの名無しさん:2013/03/21(木) 01:56:00.75
>>601
On Error Resume Next
603デフォルトの名無しさん:2013/03/21(木) 01:58:29.01
おお、ようやっと書き込みができた…。
601のモジュールは、firestorage.jp/download/453df87218741574c4c8c47d44f24c1c0a512c46
を起動させるとなぜか2番目のシートの演算がおかしくなる(E列以降の関数がすっ飛ぶ)ので、分割しました。
ファイルサイズが10MBほどあるため、再計算機能をデフォルトで切っている状態でマクロを動かしています。

1.601の問題解決
2.上記関数がすっ飛ぶエラーの回避
3.可能であれば、上記全体稼働時の高速化(3分以上かかっています)
良かったらお願いします。
604デフォルトの名無しさん:2013/03/21(木) 02:00:24.87
>>600
変数名とプロパティ名を同列に語る男の人ってサイテー
605デフォルトの名無しさん:2013/03/21(木) 02:01:24.09
>602
ありがとうございます。エラー回避できました。
606デフォルトの名無しさん:2013/03/21(木) 02:01:52.81
>>603
めんどくせえ
専ブラからワンクリで飛べるようにしてこい
607デフォルトの名無しさん:2013/03/21(木) 02:07:14.86
LVが足りなくてリンクが張れませんでした。 >606さん、ごめんなさい。
608デフォルトの名無しさん:2013/03/21(木) 02:08:51.58
>>604
だから場合にもよるって言ってんじゃん
609デフォルトの名無しさん:2013/03/21(木) 03:16:39.18
こんなサンプルでわざとスタックをオーバーフローさせてみた
何秒ぐらいかかるかと思ったら、F5を押したと同時にエラーが出た
意外だったのは落ちた時のlの値がマシンによって全然違ったこと
てっきりVBAのスタックサイズは固定だと思ってた

Dim l&
Sub a()
  l = l + 1
  a
End Sub
610桃白白:2013/03/21(木) 04:14:51.44
>>603
Function シート2について。
ResizeのあとにSelectしないと追加されたFormatConditonオブジェクトと
色を設定するFormatConditionオブジェクトが異なることになるっすよ。

高速化について。
コードを書き換える前に時間がかかっているのはどの部分なのか見極めるのが大事だって
どっかのナイスガイがいってた。なのでまずは関数ごとに処理にかかる時間を測定しちゃいなよ。

関数がすっ飛ぶエラーについて。
                    ハ_ハ _
                   ∩゚∀゚)ノ 飛べばいいよ!
                    )  /
                   (_ノ_ノ
これしか思いつかない。どういうこと?
611デフォルトの名無しさん:2013/03/21(木) 07:23:11.54
>>601
>>603
モジュールの何のプロシ−ジャを実行したの?
Function シート2って何?
どんなエラーがでたの?
E列以降の関数がすっ飛ぶってどういうこと?

モジュールをダウンロードしてみたけど、シート名が指定されているから全く動かん。
シートの環境をエスパーしろってことなのか?
少なくとも再現できないと回答なんかできないと思う。

高速化したいのなら、プロシージャの先頭や最後にDebug.Printでタイムスタンプを出力することで
場所を絞り込みながら特定するしかないと思うけど。
612デフォルトの名無しさん:2013/03/21(木) 09:59:45.56
>>574
ありがとう
桃白白
ありがとう
613デフォルトの名無しさん:2013/03/21(木) 10:01:02.74
>>612
569です
614デフォルトの名無しさん:2013/03/21(木) 21:50:42.18
このパンツをはいて歩いても露出狂の罪で逮捕はされないですよね?パンツなんだから。
http://image.rakuten.co.jp/exytiara/cabinet/5-4/mkb307-cmmm-4aaa.jpg
615デフォルトの名無しさん:2013/03/21(木) 23:43:40.58
履いているやつが15歳以下だったら多分見ているやつが逮捕される
616デフォルトの名無しさん:2013/03/22(金) 09:21:44.60
>>574
ついでと言っては何ですがこれの応用について教えて下さい
Sheet1のA1,B1,C1,D1,E1にそれぞれ大分類名があり、それぞれの
列に小分類がリストアップされています
Sheet2のD列に小分類が羅列してあるときにSheet1を検索して
Sheet2のE列に大分類を入力したいときに
同じようにできないでしょか?
617デフォルトの名無しさん:2013/03/22(金) 09:54:52.73
自分でやる気ゼロかw
618デフォルトの名無しさん:2013/03/22(金) 09:59:29.32
出来るか出来ないかという回答のみでOK!
619デフォルトの名無しさん:2013/03/22(金) 10:39:18.50
馬鹿には無理
620デフォルトの名無しさん:2013/03/22(金) 11:37:32.43
馬鹿にしないでください、ちょっと自分が可愛いだけなんです
621デフォルトの名無しさん:2013/03/22(金) 12:02:48.05
馬鹿に無理だって事ぐらい馬鹿以外は既に分かってるから意味がない
馬鹿には言ったって理解できないからやっぱり意味がない

結局どちらにしても意味がないんだから
そんな無駄な発言をするやつは馬鹿だってことになる
622デフォルトの名無しさん:2013/03/22(金) 12:36:31.46
つまり、俺が馬鹿だ
623デフォルトの名無しさん:2013/03/22(金) 12:46:01.79
>>622
君は馬と鹿の合いの子か
馬と鹿のどっちが父でどっちが母?
624デフォルトの名無しさん:2013/03/22(金) 15:05:22.28
>>616
Excel関数をセルに埋め込めばできそうだけどVBAで殺るの?
offsetとかVlookupとかindirectとかaddressとかで
625桃白白:2013/03/22(金) 22:08:25.92
>>616
できるっしょ。できなかった?こんな感じで。
https://friendpaste.com/2OkEEmGpesvO29wgPH51Um
626デフォルトの名無しさん:2013/03/23(土) 06:51:39.20
>>625
丸投げされてることに気づけよ。
627桃白白:2013/03/23(土) 07:30:13.01
>>626
いんじゃないの?桃白白ひまだし。なんかまずいのか?
桃白白受身ぐらいとれるよ。
628616:2013/03/23(土) 07:53:18.17
>>627
ありがとう!
正直このレベルは自分では無理でした
色々試行錯誤したが全く思うようにならず・・・

桃白白のを参考に勉強してみます。

>>624
Excel関数も考えたのですが
今後の発展性を考慮してどうしても
VBAでやりたかったんです
629デフォルトの名無しさん:2013/03/23(土) 08:16:46.26
>>628
> 正直このレベルは自分では無理でした
> 色々試行錯誤したが全く思うようにならず・・・

うそくせぇ。
自分がどの程度までやって何がわからなかったのか全く示してないし。
勉強しますと言ってるけど、また丸投げするんだろ。
で、それが勉強と。

> Excel関数も考えたのですが

どういう関数を考えたのかな?
後出しだったら何とでも言えるよ。
630デフォルトの名無しさん:2013/03/23(土) 10:26:22.76
>>629
君うざいよ?
631デフォルトの名無しさん:2013/03/23(土) 10:43:09.43
Set A=nothing
ってやらなくても動くよね
やらないと不具合あるの?
632デフォルトの名無しさん:2013/03/23(土) 10:46:58.73
多分動くけどメモリの無駄遣いになる
普通はこまめに使ったインスタンス消す

L1キャッシュをできるだけ利用する様にしたいから(で正しいよな?)
633デフォルトの名無しさん:2013/03/23(土) 10:47:33.92
>>631
メモリを消費したままだから
Excelが重くなるのではないか?
634デフォルトの名無しさん:2013/03/23(土) 10:59:58.62
>>631
基本的に問題ない
VBA含むVB言語は、参照切れると自動で破棄(=Nothingと同じ)されるから
参照したまま(メモリ食ったまま)ってことは無いからね

ただ、グローバル変数とかだと参照したままになるので、
まあグローバル変数使うのは大抵参照したままにしたくて使うわけだが
破棄した方が良いケースもあるので、そう言う時は明示的に破棄(=Nothing)してやる必要がある

あと、滅多にないが破棄イベント(クラスで言うところのClass_Terminate)を任意のタイミングで
発生させたい場合も、End Subなどで自動破棄されるのを待たずに、任意に=Nothingすることもある



という感じでVBAではプロシージャ内では問題ないが、他言語も使ってるか、今後使う予定があるなら
VBA上では無駄でしかなくても、毎回きちんと明示的に=Nothingするクセ付けた方がいい
635デフォルトの名無しさん:2013/03/23(土) 14:02:19.19
>>634みたいな馬鹿が、バッドノウハウをいつまでも信じて、
それが不要になるどころか有害になっても使ったりするんだろうなあ
636デフォルトの名無しさん:2013/03/23(土) 14:49:59.85
この話題が出るたびに思うんだけど、やらなくても問題ない、じゃなくて、やっても問題ないというのが
正しいにんしきだよね。本質的には不要なことするんだから。
で、本当に必要な場面がどこかわからなくて、全部やっとけとかいう奴がでてくる。
637デフォルトの名無しさん:2013/03/23(土) 14:52:30.95
>>635
何故にいきなり顔真っ赤モード?
638デフォルトの名無しさん:2013/03/23(土) 15:22:01.53
あとで問題が出たときに問題が出てから探すと却って面倒なケースがある。
予め問題が出ないように対処しておくことは決して無駄ではない。
639デフォルトの名無しさん:2013/03/23(土) 15:33:21.12
>>638
それってどこで本当に必要かわからんってことだよね?
640デフォルトの名無しさん:2013/03/23(土) 15:43:49.29
原発事故が好例
津波対策は不要としてケチったために
結局事故を起こして多大な賠償をするハメになる
安物買いの銭失いとはこのこと
641デフォルトの名無しさん:2013/03/23(土) 15:47:37.34
馬鹿丸出し
642デフォルトの名無しさん:2013/03/23(土) 16:12:15.11
馬鹿発見
643デフォルトの名無しさん:2013/03/23(土) 16:16:32.15
ちんちん丸出し
644デフォルトの名無しさん:2013/03/23(土) 19:21:55.12
>>634
まぁ俺もNoting付ける癖は付けておいた方がいいと思うよ。
その方がよさげなケースが簡単に思いつくからね。
例えば再帰処理を行う、自分自身を呼び出す前に不要になった、生成したものは絶対Noting しておくべき。
そうしないと使わないエリアをどんどん掴まえたままにしてしまうからね。
Notingしておけば適当な所でガーベッジコレクションが働いてメモリ上のインスタンス自体を破棄してくれるから、
メモリリークの心配もなくなる。
645デフォルトの名無しさん:2013/03/23(土) 19:24:32.80
=Nothingはおまじないとしてわりと広く使われているけど賛否あるから
こういう場では書かない、見てもスルーするのが大人の対応だと思うよ
この間VB6スレがNothing論争で大分荒れてたし
646デフォルトの名無しさん:2013/03/23(土) 19:25:18.37
>>644
GCはないわぁ・・・
647デフォルトの名無しさん:2013/03/23(土) 19:39:28.69
>>646
何でないと思えるんだろう。
Noting自体は参照するアドレスを解放だけで参照先のインスタンスを解放する訳ではないのに。
648デフォルトの名無しさん:2013/03/23(土) 19:41:52.23
インタプリタだからインスタンスを開放し忘れてもメモリの圧迫度合いが少ないというのは
あるんでしょか?

クラスモジュールを標準モジュールから呼び出ししただけならば
その呼び出したクラスモジュールに定義されている変数分だけはメモリ確保されるけど
コードの部分はインタプリタだから都度解釈されて実行コードに変換される
で、そのクラスを利用しているプロシジャを抜ければインスタンスも開放される。




まぁ、ワシのティンコはインタプリタというよりはコンパイラですけどね(´・ω・`)b
649デフォルトの名無しさん:2013/03/23(土) 20:16:49.33
Notingつけないと循環参照のとき終わるよ
650デフォルトの名無しさん:2013/03/23(土) 20:33:52.53
終わるとは?
651デフォルトの名無しさん:2013/03/23(土) 20:45:00.53
仕事でそんなプログラムをくんだ
あなたの人生
652650:2013/03/23(土) 20:46:13.41
シマラソね
653デフォルトの名無しさん:2013/03/23(土) 20:52:07.03
要するに自分が書いたコードを理解してないだけじゃん
654デフォルトの名無しさん:2013/03/23(土) 20:57:36.76
そんないい加減でもやってけるのが
VBAの醍醐味じゃん
655デフォルトの名無しさん:2013/03/23(土) 21:30:34.33
つーかどっちでもいいから
NothingをNotingと書くのはいい加減やめてくれ
656デフォルトの名無しさん:2013/03/23(土) 21:43:30.69
は?ノーティングしらねぇの?
657デフォルトの名無しさん:2013/03/23(土) 21:48:40.45
>>644
誰も必要な時にまでNothing不要だなんて言ってないよ。
不要な時にまでNothingすべき言う奴が叩かれてるだけで。
658デフォルトの名無しさん:2013/03/23(土) 21:53:11.72
要不要を確実に判断し、何時いかなるときも間違いの無いコードを書ける御方はそれでいいじゃない
めんどくせぇから一律でNothingしとけばとりあえず安全なんじゃね、って考えも楽でいいじゃない
659デフォルトの名無しさん:2013/03/23(土) 21:57:40.81
馬鹿丸出し
660デフォルトの名無しさん:2013/03/23(土) 21:59:16.07
>>657
Nothingを書いたり書かなかったりするほうがデメリットが多いような気がする。
ぱっと見コードに統一性がないから、Nothingの記載漏れなのか意図的にNothingを記載していないのか判断できないし。
態々Nothingあるなしの理由をコメントするのもアレだしね。
661デフォルトの名無しさん:2013/03/23(土) 22:04:13.13
>>647
Nothingを代入すれば、即座に参照は解放されるし、インスタンスなら破棄されるが。
662デフォルトの名無しさん:2013/03/23(土) 22:06:10.13
いや、必要な時だけ書くというのと、
常に書くということで、
それぞれのルールさえ守っていれば、
それはそれで一貫性が保たれていると言える。
663デフォルトの名無しさん:2013/03/23(土) 22:08:10.83
ルールの遵守にはコストが掛かる、一律Nothingした方が安上がり
664デフォルトの名無しさん:2013/03/23(土) 22:08:12.61
>>660
VBと同じ感覚で物を言ってないか?
VBAではExcelのオブジェクトの参照を保持する変数を使うことが日常的にある。
SubとかFunctionとかを抜ける前に、いちいちNothingを代入するの?
665デフォルトの名無しさん:2013/03/23(土) 22:17:05.84
そのsubなりfunction内で生成したものならnothingするかな
666デフォルトの名無しさん:2013/03/23(土) 22:20:59.46
>>665
生成じゃなくて参照。
あと、その参照を保持する変数のNothing無しの上書きは当然許容しないんだよな?
667デフォルトの名無しさん:2013/03/23(土) 23:11:13.41
>>661
そんなんでインスタンスが破棄されるかタコスケ。
他でそのインスタンス参照してたら使えなくなるじゃねーか。
インスタンスを参照している所が無くなった時にガーベジが働いて破棄されるんだよ。
668デフォルトの名無しさん:2013/03/23(土) 23:17:50.79
とまあ、揚げ足取りくらいしかする事が無くなったようなので、
この話は終わりですね。
669デフォルトの名無しさん:2013/03/23(土) 23:21:03.99
>>664
ちょっと何を言っているのかわかりませんね
670デフォルトの名無しさん:2013/03/23(土) 23:34:23.94
質問です
重複データのあるセルに色を付けようとしているのですが
重複していても色が付きません
どこを修正したらいいでしょうか?

Dim RetRange As Range
Dim i As Integer, r As Integer
Dim lRow As Long, c As Long

Worksheets("判定テーブル").Range("A1:E700").Select
For r = 1 To 5

lRow = Worksheets("判定テーブル").Cells(Rows.Count, r).End(xlUp).Row

For i = 1 To 20
Set RetRange = Selection.Find(What:=Worksheets("判定テーブル").Cells(i, r).value, _
After:=ActiveCell, LookIn:=xlFormulas, _
Lookat:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext)
If Not RetRange Is Nothing Then
If RetRange.Address <> Worksheets("判定テーブル").Cells(i, r).Address Then
c = 1
RetRange.Interior.ColorIndex = c
Cells(i, r).Interior.ColorIndex = c
c = c + 1
End If
End If
Next
Next
671670:2013/03/23(土) 23:54:44.30
すいません自己解決しました
672デフォルトの名無しさん:2013/03/24(日) 00:10:57.78
VBは即時解放だったような
673デフォルトの名無しさん:2013/03/24(日) 00:18:03.90
なんか違うらしいよ
参照カウントが0になった時にTerminateは発生するが、
インスタンスが使用していたメモリを解放するのはその後らしい
でもそこまで行くとVBAの仕様を知ってる人は少なそう
674デフォルトの名無しさん:2013/03/24(日) 00:49:42.54
俺は基本Nothingしないでメモリリークが問題になったら
必要そうなところにNothing入れていくというスタンス
675デフォルトの名無しさん:2013/03/24(日) 01:31:47.61
VBAでNothingの代入をしないことによるメモリ「リーク」するコード書けるなら、ちょっと書いてみてくれ
676デフォルトの名無しさん:2013/03/24(日) 01:36:01.59
VBA初心者です
入門書をかってその内容は一通り理解しました
このあとどのように勉強していけばよいのでしょうか?
677デフォルトの名無しさん:2013/03/24(日) 01:45:20.58
>>676
VBAを使う仕事に従事してひたすら実践あるのみ
678デフォルトの名無しさん:2013/03/24(日) 07:19:25.99
>>675
Sub hoge()
Dim list As New Collection
Dim I As Long
For I = 1 To 100000000
Dim rng As Range
Call list.Add(rng)
'Set list = Nothing
Next
End Sub
679桃白白:2013/03/24(日) 07:54:14.50
>>675
Sub test()
  Dim d As Dictionary
  Set d = New Dictionary
  Call d.Add(1, d)
  Set d = Nothing
End Sub

>>678のはメモリの解放が適切でないという意味のメモリリークで
桃白白のはメモリを解放できないという意味のメモリリーク
         ___
       /::::::::::::::::\              
      /:::::─三三─\             メモリリークの意味には揺らぎがあるのです……。
    /:::::::::<○>三<○>.\
/⌒)⌒)⌒.:::::::::: (__人__) :::::: \   /⌒)⌒)⌒)
| / / /..    ` ⌒´    | (⌒)/ / / /,,
| :::::::::::(⌒)          /  ゝ ::::::. .........._
|     ノ           \  /_ /´    ヽ
ヽ    /             ヽ / /0      .',
 |    |                {o       }
                     ':       /
                      ヽ、___,.,/
680デフォルトの名無しさん:2013/03/24(日) 08:17:03.37
>>669
VBAはVBに比べてSetを使うことが格段に多く、そのほとんどはExcelオブジェクトの
参照の保持に使われるのだが、Nothing代入しろ派はそのことを忘れてVBと同じ感覚で
物を言ってないかいという意味。
わかんない?
681デフォルトの名無しさん:2013/03/24(日) 08:34:42.74
>>680
その考え方はExcelに限らずオブジェクトを多く使った場合はNothingは面倒だからしないということだね。
かなり危険な考え方と思うけど。
682デフォルトの名無しさん:2013/03/24(日) 08:38:58.96
VBAスレでメモリリークの話題が、そもそも無理があるね。
結局>>654が正論だった。
よけいな事考えんでいいから、不安定になったらエクセル再起動しろ。
683デフォルトの名無しさん:2013/03/24(日) 08:42:46.73
>>681
どういう考え方だと思ったのか謎だわ。
VBAではVBと較べると、Nothingの代入が不要なSetが格段に増えるが、
とい表現にすればわかるか?
684デフォルトの名無しさん:2013/03/24(日) 08:44:25.36
つか、参照を保持する変数を多用するだけで、多くのオブジェクトを使う場合の話じゃない。
685デフォルトの名無しさん:2013/03/24(日) 08:45:28.79
>>678
コメント外したらループ2周目で落ちるよ?

>>680
わからないよ
そんなもん仕様次第だしVBAでExcelオブジェクトをリーク?
君の変数はExcelプロセスより生存期間が長いのかい?
686デフォルトの名無しさん:2013/03/24(日) 09:12:03.80
>>680
いやぁ何を言っているのかさっぱり分かりませんね。
あなたはExcel のオブジェクトの参照にスコープも考えずにモジュールのパブリックな変数にでも
保持すると言っているのでしょうか。
それは使い終わった変数と呼べるのでしょうかねぇ。
その方法がExcelのVbaだからとか、Vbだからって何の関係があるんですか?
全く理解出来ません。
687デフォルトの名無しさん:2013/03/24(日) 09:22:01.18
>>686
SubやFunction内でExcelオブジェクトの参照を保持する変数を使うことが
VBAには多いが、それらもいちいちNothingを代入するのかって話で、
どこがわからんのか、こっちこそさっぱりわからん。
で、代入するの?しないの?
688デフォルトの名無しさん:2013/03/24(日) 09:24:46.56
ほら、もう>>685,686みたいなおかしな奴しか出てこない
689デフォルトの名無しさん:2013/03/24(日) 09:30:16.53
>>687
相変わらず何を言っているのか分かりません。
一度コードを書いて貰えますか?
ちょっと情報が少な過ぎて判断しかねます。
690デフォルトの名無しさん:2013/03/24(日) 09:35:55.47
End SubやEnd Functionの直前でずらずらと不要なNothing代入文を書かなきゃ
ならないとしたら、途中でExitするときもその時までに使った変数にNothingを
代入する必要が出てきて無様なことになる。
691デフォルトの名無しさん:2013/03/24(日) 09:40:24.19
>>689
sub hoge()
set ws = worksheets("hoge")
set r = ws.range("a1").currentregion
...
for i = 1 to r.rows.count
set cell = ws.cells(i, 1)
...
next
...
end sub

ws, r, cellはNothingの代入が必要なのか?
692デフォルトの名無しさん:2013/03/24(日) 09:41:04.64
>>690
あなたは普段いったいどんなコードを書いているんですか?
なんでズラズラとNothingをならべなければいけなんですか?
本当に言っている意味が分からなくなって来ました。
693デフォルトの名無しさん:2013/03/24(日) 09:45:39.23
必要です。
ただし、1つでいいです。
Excelのオブジェクトを扱うクラスを生成しておいて、
そこでExcelの操作を行い、終わったらNothingで破棄してやればいいだけです。
694デフォルトの名無しさん:2013/03/24(日) 09:45:51.23
>>692
普段は不要なNothing代入とか書かないようなコードを書いてるが。
695デフォルトの名無しさん:2013/03/24(日) 09:48:20.32
>>693
なんで必要なの?
696デフォルトの名無しさん:2013/03/24(日) 09:48:35.50
>>693
>>691へのレスで、
もっと沢山のobjectを操作する事を前提で言っています
697デフォルトの名無しさん:2013/03/24(日) 09:51:54.50
>>693
それでNewとか使うからNothingが必要なんじゃないかって勘違いが発生するんだよ。
ちなみにそのケースでも、Nothingの代入は不要だろ。
698デフォルトの名無しさん:2013/03/24(日) 09:54:15.89
>>696
rows.countが10000なら、1万個の参照をcellに代入するけど。
つか、君もどんな状況を想定してるのか、コード書いてよ。
699デフォルトの名無しさん:2013/03/24(日) 09:57:17.51
>>696
>>697
それに関しては既に前に述べている人がいますね。
再帰処理や循環参照を行った時に、その間もずっと参照が保持され続け、
メモリリークやオーバーフローが発生する恐れがあるからです。
700デフォルトの名無しさん:2013/03/24(日) 10:03:20.90
>>699
上のコードには再帰も循環参照も全くないけど、なんでNothingの代入が必要なんだ?
701デフォルトの名無しさん:2013/03/24(日) 10:09:44.22
スタックオーバーフローが発生するほどの再起が必要な場合は、単純ループに書き換えるとか
データ構造を見直すとか、データはシートに保持するようにするとか、そういう手当てが必要で、
Nothingの代入が常に必要論とは本質的な関係はないね。
702デフォルトの名無しさん:2013/03/24(日) 10:12:20.80
>>699
再帰のケースはメモリリークではない。
場合によっては不要なメモリへの参照期間が長くなるが解放はされる。
循環参照のケースは、とりあえずNothingしておけばいいという問題ではなく
解放する順番やタイミングが大事。
したがって、本当はとりあえずNothingという考え方の方が危険。
703デフォルトの名無しさん:2013/03/24(日) 10:15:36.67
>>700
本当に何にも想定していませんね。
例え循環参照していなくても、
大きなオブジェクトを立て続けに使えばメモリに対する負担はそれだけ増えるし、
場合によっては同じ様にメモリリークやオーバーフローが起こる事が何故分からないんですか?
関数が終わればPrivateな変数の参照が破棄されるとは言え、
同じ関数内で幾つかの大きなObjectを使う場合はどうなるんです?
704デフォルトの名無しさん:2013/03/24(日) 10:20:44.64
>>703
ws, r, cellにNothingの代入が必要かどうかに、一体何の想定が必要なんだ?
ws, r, cellにNothingの代入が必要な理由を明確に書いてくれ。
あと、君が想定するコード早く書いてね。
705デフォルトの名無しさん:2013/03/24(日) 10:21:08.60
いつまでやってんだ、アホンダラどもが

どっか他でスレ立ててそこでやれや
706デフォルトの名無しさん:2013/03/24(日) 10:31:31.29
多分相手にしてるのはVB6プログラマで、VBAはドシロウトだから相手にしない方がいいよ
707デフォルトの名無しさん:2013/03/24(日) 10:39:23.47
>>703
俺は700じゃないけど、オーバーフローってスタックのか?
スタック不足とメモリリークを同列に語るとか頭大丈夫かお前?
708デフォルトの名無しさん:2013/03/24(日) 10:40:21.97
俺はNothing不要派
どうしても必要なところがあればNothingする。
709デフォルトの名無しさん:2013/03/24(日) 10:47:38.06
クラスモジュールがたくさん定義されていて
変数だけで数MB級になるようなコードだったら
こまめにNothingしたほうが安心かなとは思う。


まぁ人それぞれってことで。
710デフォルトの名無しさん:2013/03/24(日) 10:47:38.80
NotingではNothing
711デフォルトの名無しさん:2013/03/24(日) 10:48:41.54
レガシーASPですらNothingしなくても問題なかったのに
ExcelでNothingなんてアホらしい
712デフォルトの名無しさん:2013/03/24(日) 10:56:18.24
>>678
俺の環境(VISTA 32bit Excel2007)では、>>678のコードがExcelごと落ちるな
そしてループ内でDoEventsかますと落ちない
ちょっとExcelの動作があやしいが、これのどこで何のメモリがリークして
それにNothingの代入がどう関係するんだ?
713デフォルトの名無しさん:2013/03/24(日) 10:58:29.91
本当に必要なレアケースを持ち出して(そして、実はそれが間違いというオチつき)、それを
一般論にまで適用するという馬鹿さ加減。
714デフォルトの名無しさん:2013/03/24(日) 11:00:35.52
そしてレアケースを起こしてクビになると
715デフォルトの名無しさん:2013/03/24(日) 11:01:12.44
>>679
VBAにDictionaryなんてないが、まあそれは置いとくして
お前の定義では循環参照が解放されないのはメモリリークなんだな
その定義に従うなら
Nothingを適切に代入することにより、ある種のメモリリークが防げる
は正しい
でも、常にNothing代入すればそれが防げるというのは間違ってる
716712:2013/03/24(日) 11:03:41.15
訂正
DoEventsかましても落ちたわ
でもこれ落ちた理由は大量にメモリを消費したからであって、リークしたからじゃないはずだが
717デフォルトの名無しさん:2013/03/24(日) 11:04:11.05
Scripting.Dictionaryのことだろ?
俺は普通に参照設定して使うものと理解したけど。
718デフォルトの名無しさん:2013/03/24(日) 11:09:03.38
なんでもかんでもNothingするのはアスペ
719デフォルトの名無しさん:2013/03/24(日) 11:10:37.26
余計なコードは書かないのがプログラマの本懐。
Nothing入れろなんて、開発元のMSが言っていないことをする必要はない。
やるならば、個人の流儀として己の内にとどめておけばよい話。
掲示板で他人に向けて使うべきと主張するな。
720デフォルトの名無しさん:2013/03/24(日) 11:12:38.45
>>715
>>679はNothingを代入しても解放されない例だろ
721デフォルトの名無しさん:2013/03/24(日) 11:13:31.30
>>717
まあ普通はそうだろうが、Scripting.Dictionaryがメモリリークしても、本来VBA関係ない
Scripting.Dictionaryの仕様か実装の問題
Nothing代入論争はVBAの仕様(と実装)の問題

まあ実際の現場ではその差はあんまり意味ないけど
722デフォルトの名無しさん:2013/03/24(日) 11:21:49.61
Cで、sizeofとかreturnに()つけてて、なんでって聞いたら「念のため」って答えた奴思い出した
コイツらは、単に要不用の区別が付かない自分を正当化したいだけだよ
723デフォルトの名無しさん:2013/03/24(日) 11:26:49.19
>>722
いるいるww
まずは絶対にNothingを付けないようにして
Nothingが必要なところに入れる習慣をつけるべき。
724デフォルトの名無しさん:2013/03/24(日) 11:44:54.32
俺の環境ではメモリ不足って出るな。
Nothingのコメント外したら出なくなったが・・・。
725デフォルトの名無しさん:2013/03/24(日) 11:52:44.31
returnには()いらんけど
sizeofには()つけてる
726デフォルトの名無しさん:2013/03/24(日) 12:24:51.13
あれは、sizeof演算子だと頭では理解していても括弧を付けたくなる。
C#のsizeofを括弧必須にした奴は、きっと毎回少しイラッとしていたに違いないw
727デフォルトの名無しさん:2013/03/24(日) 13:05:20.13
Nothingはいらないな
全くいらない
なんであんな命令が残っているのか
728デフォルトの名無しさん:2013/03/24(日) 13:07:12.09
nothingはis nothing判定する変数に使ってるお
ループ内、public含め。
729デフォルトの名無しさん:2013/03/24(日) 13:08:02.50
nothing以外のお話を誰か抽出して!
730デフォルトの名無しさん:2013/03/24(日) 13:11:30.79
>>722
call ほげ( 引数 )
ほげ 引数

これもそれ系のお話しやん
話題はつきぬがすれ違いという哀しい現実ぅ
731デフォルトの名無しさん:2013/03/24(日) 13:11:57.41
>>729
残念ながらnothingです
732デフォルトの名無しさん:2013/03/24(日) 13:13:36.82
昔nothingという映画があってだな、
733デフォルトの名無しさん:2013/03/24(日) 13:28:50.68
http://msdn.microsoft.com/ja-jp/library/cc376103.aspx
http://msdn.microsoft.com/ja-jp/library/cc344614.aspx

こういうケース以外はNothingいらないの?
ほかにも必要な場合ってどんなの?
734デフォルトの名無しさん:2013/03/24(日) 16:10:50.66
>>733
そういうケースはNothingいりません
735桃白白:2013/03/24(日) 22:45:15.64
>>712
メモリリークはメモリが確保されていて
プログラムが動作するうえで確保されているメモリが不必要なものであり
その時間が不適切に思えるほど長いときのこと
またはその量が不適切に思えるほど多いときのことである

メモリリークをそういうふうに定義すると>>678はメモリリークであると読めるっしょ

もしかするとお前はそれがメモリリークじゃないといいたいのかも
しれないけれども そうするとそれはもうNothingが必要か否かの話じゃなくて
メモリリークの定義とはという言葉の定義の話になる

言葉の意味の揺らぎを利用してお前がいってることは違うということは
簡単だけれども あまり建設的ではないわね
736デフォルトの名無しさん:2013/03/24(日) 23:01:26.73
>>735
Nothingが必要な理由がメモリリークっていうのなら、メモリリークをちゃんと定義しとかないと話にならんのだが
>>678が何を主張したいコードなのかわからんが、ただ大量のメモリを使ってるだけだぞ
お前の定義であれば>>678は大量のメモリを確保するのが目的のプログラムなんだから、
不必要なメモリを確保してない=メモリリークではないわけだが?
737デフォルトの名無しさん:2013/03/24(日) 23:14:23.40
メモリリークって、C言語でポインタ計算を間違えた時に起きるやつじゃないの?
VBAでは理論上は起きない、起こせないと思うんだけど
738桃白白:2013/03/24(日) 23:28:50.04
>>736
>>735のようにメモリリークを定義すると>>678はメモリリークであるってことに筋がとおるっしょ

>>678のコードの目的はメモリを大量に確保することだというふうに前提を置くと
>>678のコードはメモリリークではないということになる

それは否定しないけど そうすると>>678はメモリリークじゃないものを
Nothingを代入しないとメモリリークする例としてあげた頭がおかしい人ということになる

書いた人間がおかしい人であるという方向に読む人が前提を置くことは
容易にできることだけれども そうすることにどれだけの意味があるのかなと桃白白は疑問に思います
739デフォルトの名無しさん:2013/03/24(日) 23:36:25.53
Firefoxのメモリリークは半端ないよな
740デフォルトの名無しさん:2013/03/24(日) 23:43:30.42
クライアントアプリでメモリリークなんて気にしてもな
741デフォルトの名無しさん:2013/03/25(月) 02:56:53.37
Dim Hoge = "ほげぇ・・" As String
が出来ない理由って何?
742デフォルトの名無しさん:2013/03/25(月) 03:23:48.02
できるようになってないから
743デフォルトの名無しさん:2013/03/25(月) 06:21:01.45
>>736
その例は解放すべき場所で解放しなかった為にメモリを大量に使ってしまった例。
だからNothingのコメント外すとなにも起きないでしょ?
メモリリークの意味を一度Wikiとかで見た方がいいと思うよ。
744デフォルトの名無しさん:2013/03/25(月) 06:30:49.91
>>707
スタック?どこに書いてあんの?
745デフォルトの名無しさん:2013/03/25(月) 06:31:24.65
>>741
MSにやる気がないから
なぜやる気がないかは直接聞いてくれ
746デフォルトの名無しさん:2013/03/25(月) 06:36:06.84
>>741
結果 0 が成り立つ修羅の言語だから

Option Explicit
:
If 1 = 0 Then
 Dim x As Double
 x = 12
End If
x = x / 3
Debug.Print x
747桃白白:2013/03/25(月) 07:07:20.13
>>741
桃白白がかわいいから
                    .∩___∩
                   /       \|   なんつったりしてな!
                   | ●   ●  丶
                  ミ  (_●_ )    |     ガハハハハハ!
     ハハハ          /´、  |∪|   、彡
  ∩_∩  ∬        (  <`\ ヽ/  __ 丶
 ( ´∀`) ∩    ∬   \_)  |  ▽(___)
 (つ= つ▽  ,,,。,;;;。,,,//   /  /    |
  と_)_) ▼ ( ̄ ̄ ̄ ̄)  (__(____)

ところで
Dim Hoge = "ほげぇ・・" As String
はどういうコードなの?
値"ほげぇ・・"がString型で変数HogeがVariant型てこと?
それとも
値"ほげぇ・・"が変数Hogeに代入されて変数HogeがString型てこと?
それとも
ほかのなにか?
748デフォルトの名無しさん:2013/03/25(月) 07:09:01.99
普通
dim hoge as string = "hoge"
だろ
749デフォルトの名無しさん:2013/03/25(月) 07:11:07.64
だな。
.Net以降は出来る。
750デフォルトの名無しさん:2013/03/25(月) 07:40:51.32
stringに代入してるみたいで気分悪い
751桃白白:2013/03/25(月) 08:03:54.50
>>750
それは宿命としかいいようがない気がするけどさ
データのあとにデータ型を書くようにすると変数のデータ型が
ないように見えてしまう それを回避するにはデータ型を変数の
前に書くしかない つまり桃白白が考える理想の次世代VB文法はこれ

Dim String As Hoge = "hoge"
752デフォルトの名無しさん:2013/03/25(月) 08:58:00.53
何故に「As」を変えない?

単に入れ替えただけじゃStringという名前のHoge形変数に値を代入してるだけで
意味的には今と全く変わらず、Asの前が変数名で、Asの後ろが型名なので
文字列型の型名がHogeになって、Stringが予約後から外れることが理想と言ってるのと同じ

あまりにも安直で思慮が浅すぎだ
753デフォルトの名無しさん:2013/03/25(月) 09:25:29.40
そもそもDimってなんなん?
754デフォルトの名無しさん:2013/03/25(月) 09:27:34.81
オレ言語作ればいいじゃん。
VBAとは関係ないだろ。
755桃白白:2013/03/25(月) 09:28:50.57
>>752
ちがうよ ぜんぜんちがうよ
Dim データ型 As 変数 = 値
という文法だよ

一昔前はさ変数が値を持つと言ったものだけど 昨今は値が変数を束縛する
なんてよくわからんこというじゃない じゃあ次世代のパラダイムとして
変数がデータ型を籠絡するなんて言い方するようになってもいいと思うの

深いっしょ?安直といったことを撤回してもらいたいよ
756デフォルトの名無しさん:2013/03/25(月) 09:54:27.62
そんならDimとAsは省略可能にするのがええじゃろ
代入のLetみたいに
もはや誰も使わん
757デフォルトの名無しさん:2013/03/25(月) 09:56:42.67
お前らもうC#つかとけよ。DimもAsもいらないから

>>755
Dim hoge As String

Dim String As hoge = ""
と、両方許すの?
Dim String As hoge
は許すの、許さないの?
互換性はすてるの?
浅慮すぎるわ、お前
758デフォルトの名無しさん:2013/03/25(月) 10:08:37.87
String Hoge = "はげ"

あれ?
759デフォルトの名無しさん:2013/03/25(月) 11:21:50.86
>>758
シンプルだな
ひょっとしておまい天才か?
760デフォルトの名無しさん:2013/03/25(月) 20:40:57.06
>>758
パクリやん
761デフォルトの名無しさん:2013/03/25(月) 20:45:24.39
>>753
VB作るとき、マイクロソフトの社員がディアマンテ欲しいなーってずっと考えている時、何となく付けてしまった。

決して配列などと言う意味ではない。
762デフォルトの名無しさん:2013/03/26(火) 00:25:29.75
>>760
たまたま同じ結論に到達しただけ
よくあること
763桃白白:2013/03/26(火) 01:02:45.86
>>762
アヒルさんとガチョウさんが似てるようなものですね わかります 桃白白それわかります

ところでさ
For lngCounter = lngStart To lngEnd Step lngStep
Next
これの処理が終わったときにlngCounterがlngEnd + lngStepであることは
言語的に保証されてるんだってのをいつかどこかで誰かが誰かに言ってたような
気がするんだけど それを見つけられないんだよね 知らない? これについて書かれた
文書のありかを知らない? 教えてくれたら桃白白超うれしい
764デフォルトの名無しさん:2013/03/26(火) 01:19:29.86
765デフォルトの名無しさん:2013/03/26(火) 01:29:29.63
ループ内で
lngCounter = lngEnd + lngStep + 1
しても?
Exit Forしても?
何Exit Forて。breakにしてよ!
766桃白白:2013/03/26(火) 02:10:54.51
>>764
ご提示いただいたページを見ました 探していた情報が記載されていました
ありがとうございます 桃白白超うれしいです ありがとうございます
767デフォルトの名無しさん:2013/03/26(火) 03:01:22.11
VB/VBAとは抽象化とは程遠い言語
768桃白白:2013/03/26(火) 04:52:54.83
みんな聞いて どうもこのコードでメモリリークするみたいなんだよね

Sub Test()
  Dim elm As Variant
  For Each elm In GetArray()
  Next
End Sub

Function GetArray() As String()
  Dim str As String
  str = String(65536, "a")
  
  Dim arr() As String
  ReDim arr(2048)
  
  Dim idx As Long
  For idx = LBound(arr) To UBound(arr)
    arr(idx) = str
  Next
  
  GetArray = arr
End Function

[VB6] UBound または LBound に配列の戻り値を渡すとメモリ リーク
http://support.microsoft.com/kb/197190/ja

これの類型じゃないかと思うんだけど GetArrayの戻り値をVariantにしたらメモリリークが起こらない
桃白白はVariant最強説を唱えようと思うの
769デフォルトの名無しさん:2013/03/26(火) 05:23:53.78
えー
Variantも配列も嫌い
770桃白白:2013/03/26(火) 05:55:49.64
>>769
じゃあなにが好きなのさ?
771デフォルトの名無しさん:2013/03/26(火) 06:11:27.93
も、桃白白>_<
772デフォルトの名無しさん:2013/03/26(火) 06:19:33.16
配列使うならコレクションやディクショナリの方が追加したとき一々サイズの変更しなくて済むからそっちの方が好き。
Variantはサイズでかいし、内部でどんな推論で型が決定されているのか
よく分からないし、何て言うか得体が知れなくて気持ち悪い。
だったら根幹になってる型を使う方が好き。
どうせVariantは.netになったら使えないんだし。
773デフォルトの名無しさん:2013/03/26(火) 07:26:08.00
そう言えばVariantって自前で作ったクラスのインスタンスって入れられるんだっけ?
774デフォルトの名無しさん:2013/03/26(火) 07:52:41.01
Variant配列は、
変数 = Range(範囲).Value
で、範囲の値を一括取得する時だけお世話になるな

これだけはVariant配列様々だぜ
775デフォルトの名無しさん:2013/03/26(火) 07:57:23.12
ADODBでバイナリストリーム作って
Readするときに使うくらい。
776デフォルトの名無しさん:2013/03/26(火) 08:47:26.06
>>768
そのページに例があるのに、何でわざわざ変えちゃうのさ。
そのせいで内容変わっちゃってるし。
それはあかんよパイパイ。
777桃白白:2013/03/26(火) 09:38:29.52
>>773
可能だよ コード補完できないからあんまやらんよね
778デフォルトの名無しさん:2013/03/26(火) 10:25:08.89
>>763
そんな保障ねえだろ
For i = 1 To 5 Step 3
Next
MsgBox i
お前の環境じゃ8になるのか?
779デフォルトの名無しさん:2013/03/26(火) 10:33:12.90
>>768
おまえそのKBの内容ちゃんと理解してるのか?
すくなくともそこのKBに書いてある内容と、お前のコードは合致しないんだが?
それほんとにメモリリークしてるのか?
ためしにTestを100万回ほど呼んでみたが、リークしてる様子はないぞ
780デフォルトの名無しさん:2013/03/26(火) 10:49:28.13
>>772
>コレクションやディクショナリの方が追加したとき一々サイズの変更しなくて済む
コレクションやディクショナリは配列とは違いますよ
配列は本来事前にサイズがわかっているときに使うもので、追加するときに
いちいちサイズ変更するものではありません

>>内部でどんな推論で型が決定されているのか よく分からないし
VBAではどんな推論もされていませんが?

得体が知れないのではなくて単に知識が足りないだけです
781デフォルトの名無しさん:2013/03/26(火) 11:54:12.63
うちの会社ではActiveDirectoryをつこてます。
ログインIDから、その人の名字、名前、電話、部署名などなどいろんな個人のデータをひっぱってきたいんですが
どうすればいいですか?
782781:2013/03/26(火) 11:55:17.05
メールアドレスもひっぱってきたいです。

ひっぱってきたいデータはOutlookの個人のプロパティに載ってるやつです。
783デフォルトの名無しさん:2013/03/26(火) 11:58:05.77
ADSIを使えば簡単
784デフォルトの名無しさん:2013/03/26(火) 12:08:25.71
ADSIとはなんでしょうか?
もしソフトなら、あいにくうちの会社はセキュリティレベルが最高級なので、インストールできないんです。
785デフォルトの名無しさん:2013/03/26(火) 12:15:57.39
いや、くぐれよ
786デフォルトの名無しさん:2013/03/26(火) 12:16:24.84
ぐぐれってなんですか?
ククレカレー?
787デフォルトの名無しさん:2013/03/26(火) 12:26:58.08
ぐぐれなどとは言っていない。くぐれと言ったのだ。
788デフォルトの名無しさん:2013/03/26(火) 12:31:47.88
>>786
ククレなんて言ったら犯罪になっちゃうぜ
自殺強要でな
789デフォルトの名無しさん:2013/03/26(火) 22:57:15.73
>>780
>>内部でどんな推論で型が決定されているのか よく分からないし
>VBAではどんな推論もされていませんが?

Sub hoge()
Dim var As Variant
var = "hoge"
var = 1
var = Range("A1:B2").Value
End Sub

varに値が代入されている所にブレークポイント付けてウォッチ式でも
ローカルウィンドウでもいいから型を確認して見ろ。内部型が表示されるだろ
それが推論されたものでなくてなんだと言うんだヴォケが
790デフォルトの名無しさん:2013/03/26(火) 23:13:24.82
すい‐ろん【推論】
[名](スル)ある事実をもとにして、未知の事柄をおしはかり論じること。「実験の結果から―する」
791デフォルトの名無しさん:2013/03/26(火) 23:25:09.66
型推論 かたすいろん (コンピュータ)
Type inference. ML等の静的に強く型付けされた言語において,変数や関数の型をプログラマが明示しなくても,処理系が自動的に決定してくれる仕組みのこと.型理論の知見に基づく.
792デフォルトの名無しさん:2013/03/27(水) 03:03:50.99
>>789
型はVariant型のままで、何の推論もされてませんが?
Variant型に対する理解が足りてないんじゃないですか

それか、.NETでObject型で宣言した変数に違う型を代入したら型推論だとでもいう気かな
793デフォルトの名無しさん:2013/03/27(水) 06:46:10.19
>>792
まず.Netでobject型に代入出来るのは型ではない。インスタンス。
そう言いたかったんだと仮定して、Objectに代入したら型変換を行わないと
その継承先であるクラスのインスタンスのメソッドやプロパティは使えない。当たり前だよね。.Netなら。
VBAではString型などObject型を継承して作られている訳ではないので、代入すら出来ない。
.Netでは2008より、Dim value = "AAA" の様に型を指定しなかった場合、
valueは代入される値側から判断して、String型になる。これが型推論。
そしてVariantの内部処理形式もDim value As Variant、value = "AAA"を行うと
型を見てみるとVariant/Stringと表示される。String部分が内部処理形式と言われるもの。
これが>>789が言ってる内部型だね。様は型推論無しでどうやってStringと見なせたのかと言いたいんだろう。
794デフォルトの名無しさん:2013/03/27(水) 07:20:58.45
それよりなんで突拍子もなく.NETのObject型の話がでてきたのかの方が気になるw
795桃白白:2013/03/27(水) 07:54:59.02
>>794
論理的な飛躍はないんじゃないか?
796デフォルトの名無しさん:2013/03/27(水) 11:41:28.36
Variant型は.NETでのObject型みたいなもんだと言いたかったのでは
ここVBAスレだし.NETの話はあれなんだが、明らかな間違いぐらい指摘しとこう
>>793
>Objectに代入したら型変換を行わないと
>その継承先であるクラスのインスタンスのメソッドやプロパティは使えない
すくなくともVB.NETでは間違ってます。Option指定にもよるが、実行時バインドで使えます

型推論ってのは、明示的に型が指定されていない場合に型を決定する機能
Object型が違う型になったりしないし、推論で決定された型が変わることはない

>様は型推論無しでどうやってStringと見なせたのかと言いたいんだろう
Stringを代入したから、その実行段階でVariant/Stringになってるだけ
あくまでも型としてはVariantだから、そのあと違う型(の値またはインスタンス)も代入できるぞ
Variantの内部型は何の推論も決定もされてない。代入されたものの型になるだけ
797デフォルトの名無しさん:2013/03/27(水) 13:27:46.48
まずVariant型に数値を代入する

a = 1

変数aの値はメモリ上では&h0001とかになってるはず
つぎに文字列として演算を行う

b = a & "2"

aの中身は&h0001から&h31,&h00に変換されてから、文字列として処理されるはず
変数bの値はメモリ上では&h31,&h32,&h00という文字列になってると思う
さらに数値として演算を行う

c = b * 3

変数bは&h31,&h32,&h00という文字列から&h000c(10進数で12)に変換されてから計算される
cは&h0024(10進数で36)になる

Variant型という高級言語的な概念でも結局のところはマシン語で処理してるんだから
どこかで型を決めたり変換したりしてないとおかしい
じゃあ、いつ、どういうアルゴリズムで決めてるんだ?

っていう疑問じゃないの?
798デフォルトの名無しさん:2013/03/27(水) 13:36:43.59
>>797
それ暗黙の型変換じゃないの?
つか、VBAに「型推論」機能なんて無いんだから、よそでやってくれない?
799デフォルトの名無しさん:2013/03/27(水) 15:53:29.01
リテラルの代入→リテラルの型
Variant型変数からの代入→代入元の値の内部型情報
他の型の変数からの代入→代入元の変数の型
式の値の代入→式の値の型

VBAに型推論があるとは言わない、だけど、値に型情報を持ってないのだから
Variant構造体の型情報を決めるのには、推論のような事が必要。
800デフォルトの名無しさん:2013/03/27(水) 16:23:38.70
Variant型は値の型情報も持ってるぞ。VarTypeで調べられるぞ
代入したものの型で、実行時に変化するんで推論(して実行前に決定)する必要なんかないぞ
801デフォルトの名無しさん:2013/03/27(水) 16:32:44.86
Variantと暗黙変換のせいで分かりにくいが、VBAは静的型付言語なんで
値があるのに型がないなんてことはないはずだよな
802デフォルトの名無しさん:2013/03/27(水) 17:27:13.32
値に型があるのは動的型付け言語。
静的型付け言語は変数に型がある、つまり値に型情報はもっていない。
Variant型の場合も変数(=Variant構造体)に内部型情報をもっている。
803デフォルトの名無しさん:2013/03/27(水) 18:49:53.64
どうでもいいけどVariantは構造体じゃないだろう
804デフォルトの名無しさん:2013/03/27(水) 18:51:24.97
>>800
だから、その「変化」させる時に「何に」変えるのか、型を決定するプロセスが
プログラマからは見えないところで自動的に動いてるだろ、って話なんだけど
805デフォルトの名無しさん:2013/03/27(水) 18:54:08.69
自動ではないよ
806デフォルトの名無しさん:2013/03/27(水) 19:42:48.80
素直になれよみっともない
807デフォルトの名無しさん:2013/03/27(水) 20:57:09.37
>>804
いやだから、代入したときに代入したものの型になるだけだろ
どこに不明な点があるんだ?
808デフォルトの名無しさん:2013/03/27(水) 21:00:48.51
だめだこいつ
809デフォルトの名無しさん:2013/03/27(水) 22:09:56.77
Sub hoge1()
Dim v As Variant
Dim b As Byte
b = 1
v = v + 1
Debug.Print TypeName(v)
Debug.Print v
End Sub

Sub hoge2()
Dim v As Variant
v = True
v = v And 0
Debug.Print TypeName(v)
Debug.Print v
End Sub

Sub hoge3()
Dim v As Variant
v = "0"
v = v + 1
Debug.Print TypeName(v)
Debug.Print v
End Sub

うーん・・・
810桃白白:2013/03/27(水) 22:12:13.12
>>803
VariantはVBAではデータ型といわれるものだけどその実装は構造体じゃん?

VARIANT structure (Automation)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms221627(v=vs.85).aspx
811デフォルトの名無しさん:2013/03/27(水) 22:12:19.64
おっと、hoge1は
Sub hoge1()
Dim v As Variant
Dim b As Byte
b = 1
v = b + 1
Debug.Print TypeName(v)
Debug.Print v
End Sub
だった。
812デフォルトの名無しさん:2013/03/27(水) 22:14:05.16
まず巷でいわれている型推論の定義を調べてからしてくれるかな
813デフォルトの名無しさん:2013/03/27(水) 22:20:47.86
>>812
誰に言ってるの?
814桃白白:2013/03/27(水) 22:30:48.57
>>812
型推論はコンパイラがソースコードをコンパイルするときに
コンパイラが変数のデータ型を決めることだと思うの 桃白白はそう思うの

図で表すとこうなる
           / ̄\
             |    |
           \_/
             |
         /  ̄  ̄ \
        /  ::\:::/::  \
      /  .<●>::::::<●>  \   お前はガチョウさんだ
      |    (__人__)     |
      \    ` ⌒´    /
       /,,― -ー  、 , -‐ 、
      (   , -‐ '"      )
       `;ー" ` ー-ー -ー'
       l  コンパイラ   l
815デフォルトの名無しさん:2013/03/27(水) 22:31:05.30
ひとりごとだろ
816デフォルトの名無しさん:2013/03/27(水) 22:41:04.25
>>813
お前に言ってるんだよ
817デフォルトの名無しさん:2013/03/27(水) 22:47:54.56
>>816
わたしには言ってくれないの?
818デフォルトの名無しさん:2013/03/27(水) 22:57:21.76
>>812
なんで?
819デフォルトの名無しさん:2013/03/27(水) 23:02:27.54
議論のやり方がど下手だな。
型推論の構成要件または必要十分条件を列挙し、全てVBAがクリアしてることを示せば
VBAに型推論があることの証明終わり。
または、その条件のどれか一つを満たさないことを示せば、無いことの証明終わり。
820デフォルトの名無しさん:2013/03/27(水) 23:03:37.55
そして、その条件を列挙出来ないなら、型推論の議論の参加資格なし。
821デフォルトの名無しさん:2013/03/27(水) 23:12:18.39
>>809
それがなぜそうなるかわからないのか?
最後のDobuleだけわかりにくいけど、これは+演算子の仕様

Sub hoge1()
Dim v As Variant
Dim b As Byte
b = 1
v = b + CByte(1)
Debug.Print TypeName(v)
Debug.Print v
End Sub

Sub hoge2()
Dim v As Variant
v = True
v = v And CBool(0)
Debug.Print TypeName(v)
Debug.Print v
End Sub

Sub hoge3()
Dim v As Variant
v = "0"
v = v + CStr(1)
Debug.Print TypeName(v)
Debug.Print v
End Sub

それぞれこう書くべきものが間違ったコード書いてるだけだぞ
暗黙の変換によって思った型になってないだけだ
822デフォルトの名無しさん:2013/03/27(水) 23:17:54.56
>>814
そのガチョウがダッグタイピングにかけてるなら
型推論されたらダッグタイピングにむかないって解ってるか?
823デフォルトの名無しさん:2013/03/27(水) 23:23:19.95
Haskellの型推論みたいな話は最初からしてないのに、面倒な人たちだな。
824デフォルトの名無しさん:2013/03/27(水) 23:25:46.58
Varyant型と暗黙の変換と演算子の仕様を理解してない人が暴れてるだけだろ
825デフォルトの名無しさん:2013/03/27(水) 23:33:05.84
型推論を俺定義してる人が頑固なだけだね。
826デフォルトの名無しさん:2013/03/27(水) 23:35:26.32
Varyantなんて型自体初めて聞いた聞いたけどな

バッリーィアントって発音で合ってる?
827デフォルトの名無しさん:2013/03/27(水) 23:39:22.81
アスペなのかな、この人
828デフォルトの名無しさん:2013/03/27(水) 23:40:14.21
まあ、初めから型推論してるって言ってたんじゃなくて
俺が理解できない推論で型が決定されてる って言ってただけだが
それを知識がたりないって指摘されたら
>それが推論されたものでなくてなんだと言うんだヴォケが
とか言い出した
829デフォルトの名無しさん:2013/03/27(水) 23:41:58.66
>>826
単純なtypoにしか突っ込むとこなくなったのか?
830桃白白:2013/03/27(水) 23:47:49.32
>>823
言葉というのは一人歩きするものなのです
そのことは話が広がるという意味ではいいものだけれども 話が広がる方向が自分が
思っていたものと違うときはちょっといやだよな わかります 桃白白それわかります

最初の話は>>772あたりか
Variantは内部で型の推論が行われるもので それがどういうやり方で行われているのかわからない
それがいやって話だな

Variantが保持するデータ型は演算子と暗黙の型変換によって決まるものだよって流れか

つまりVariant最強説を唱えることにした桃白白は賢くてかわいい人だというのが結論
831デフォルトの名無しさん:2013/03/27(水) 23:56:46.32
>>821
いや、そうなんだけどそうじゃないんだ。
例えば、Byte型の方がサイズとして小さいから、それを超える範疇でなければByte 型で行くかなぁって
思ったけどInteger型。

Boolean型のTrueをBit演算でFalseにしてやってもInteger型。

一番良く分からないのが文字列型で指定した数に数字をプラスしてやるとDobble型。何で暗黙の型変換でこうなるの?

型指定して入れてやったら内部ではその型になるのは分かり切ってて、これは値がどんな型で設定されるのか
試したことだから。
832デフォルトの名無しさん:2013/03/28(木) 00:05:06.01
>>831
> 一番良く分からないのが文字列型で指定した数に数字をプラスしてやるとDobble型。
暗黙の型変換で文字列を数値にするのに、整数決め打ちじゃまずいだろ。
833デフォルトの名無しさん:2013/03/28(木) 00:08:22.09
>>832
でもVariantを介すると出来ちゃう
834デフォルトの名無しさん:2013/03/28(木) 00:14:31.60
>>833
ん?どういうこと?
835デフォルトの名無しさん:2013/03/28(木) 00:20:44.12
桃白白が、話に全く付いて行けてないのに必死に参加しようとしているのが可愛い
836デフォルトの名無しさん:2013/03/28(木) 00:24:15.34
B列とE列にデータがあります。
E列が空白のB列のデータの種類を取得したいのですが
自分なりに調べて
WorksheetFunction.CountIf
を使うとこまでは何となくわかったのですがここからどうしたらいいかわかりません
できればこの種類がE列空白ですよとMsgBoxを出したいのですがどうしたらいいでしょうか?
837デフォルトの名無しさん:2013/03/28(木) 00:26:31.48
MsgBox "E列空白ですよ"
838デフォルトの名無しさん:2013/03/28(木) 00:26:52.10
>>834
最初、文字列として結合されるか、+1されるか、型違いで落ちるかのどれかだろうって思ってた。
結果として内部型(っていうの?)がStringのものに+1されたんだけど、
出来ちゃった、と言うよりそうなっちゃったものは仕方がないってことで、悩んでるのは何でDobble 型?ってところ。
839デフォルトの名無しさん:2013/03/28(木) 00:33:05.77
型意識してプログラムした方が楽だし安全だろうが?
って言ってみるテスト
840デフォルトの名無しさん:2013/03/28(木) 00:41:14.52
>>838
"0" + 1の結果は数値になる、これは"+"演算子の仕様。
"0"が数値型に変換されてDouble型になる。ここが>>832で書いたこと。
Double型 + Integer型はDouble型になる。
だろ
841桃白白:2013/03/28(木) 00:44:11.85
>>831
Variantはデータ型がわかりにくいからいやだというのはわかった
それはわかったうえでなぜそうなるのかについて

これはじつは演算子の仕様なのよ

5.6.9.8 Logical Operators
http://msdn.microsoft.com/en-us/library/ee156946.aspx
* Table 5.67 Effective Value Type of Unary Logical Operators
* Operand Value Type | Effective Value Type
* Boolean or Integer or Empty | Integer

5.6.9.3 Arithmetic Operators
http://msdn.microsoft.com/en-us/library/ee177477.aspx
* Table 5.32 Declared Type of Binary Arithmetic Operators
* Left Operand Declared Type | Right Operand Declared Type | Operator Declared Type
* Double , String or String*length | Any integral or floating-point numeric type, String or String*length | Double

>>835
桃白白がかわいいだけ読んだ ほかのところは桃白白とは関係のない話だと思った
都合のいいフィルターかましてんじゃねえと桃白白をお叱りになりたいだろうけど
桃白白がそんなことで反省すると思ったら大間違い
842デフォルトの名無しさん:2013/03/28(木) 00:50:28.50
この必死にお清まし気取った反応がたまらなく可愛い
843デフォルトの名無しさん:2013/03/28(木) 01:06:18.92
>>631
>Byte型の方がサイズとして小さいから
サイズの小さい方に合わせると、あふれる可能性があるから、サイズが違うときは大きい方のサイズに合わせるのが基本
ヘルプにも
>演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります
って書いてある

>Boolean型のTrueをBit演算で
Bit演算は2進数の演算なので数値演算
まあVBAでは数値演算と論理演算の区別つきにくいけど

>文字列型で指定した数に数字をプラスしてやるとDobble型
文字列を数値に変換するときに浮動小数点形式になってるからだな
そしてSingle+LongがDoubleになる+演算子の仕様

>>838
文字列結合するか数値加算するかもちゃんとヘルプに書いてある
まずは一度ヘルプの+演算子のとこ見ろ
844桃白白:2013/03/28(木) 04:52:23.65
>>836
種類というのがよくわかんない
E列の空白の数じゃなくて?

どういうデータでどういう結果になるのか例を教えてもらえると桃白白うれしい
845桃白白:2013/03/28(木) 05:48:18.62
>>822
ダッグタイピングを検索した。

* 次の検索結果を表示しています: ダックタイピング

おのれGoogle!それじゃないわ!桃白白は怒り狂った そしてどっちでもいいと思った
しかしドナルドダックも北京ダックもダックだ Googleが正しい気がした しゃくにさわる

ダックタイピングは値の型が異なる複数のオブジェクトがあってそれぞれのオブジェクトに
同じメソッドがあったら値の型が異なる複数のオブジェクトを同じようにあつかっちゃいなよということだろ

だからそれはそうなんじゃないか ダックタイピングと型推論とが調和しないというのは
そうなんじゃないか お前がそう思うんだったら桃白白もそう思う
846デフォルトの名無しさん:2013/03/28(木) 07:35:59.97
>>836
種類と言うのがよく分からないと言うのもあるけど、
E列が複数行空白だった場合は?全部出すとしたらメッセージボックスって
文字数制限あった気がしたけど大丈夫?
B列に同じ値が入っている行が複数有ったとして、その中でE列が空白でないものとそうでないものが
有った場合はどうするの?
847デフォルトの名無しさん:2013/03/28(木) 07:42:33.97
>>845
Googleにおちょくられたかw
人を見るからなGoogle検索。
848デフォルトの名無しさん:2013/03/28(木) 07:43:37.37
>>844
B列にたとえばA1234,B5687等のアルファベットと数字の組み合わせのIDが
何種類かあり、E列にその説明書きの文字列が入っています。
空白の数は

For i = 1 To 50
If Cells(i, 5).value = "" Then
Cells(i, 5).Select
s = s + 1
End If
Next
MsgBox s & "件未入力"

で取得できますが、E列に説明書きの入力されていない
B列のIDを MsgBoxで

A1565
D5698
の説明書きが未入力です。

と出したいのです
849デフォルトの名無しさん:2013/03/28(木) 07:46:52.38
>>846
B列の値が同じ値なら、E列の入力状況も
必ず同じになっているシートなのです

メッセージボックスの文字制限は考慮してなかったですね
何文字ぐらいなのでしょうか?
850デフォルトの名無しさん:2013/03/28(木) 07:59:07.37
>>848
Excelのオートフィルタ機能を使えば態々VBAで書かなくてもいいのに何故あえてVBAでやろうとするのかな?
851桃白白:2013/03/28(木) 08:52:17.55
>>848
なるほど こんな感じでできるよ
https://friendpaste.com/1u5iq7pvlfj9Rm355aGE9p
852デフォルトの名無しさん:2013/03/28(木) 09:17:55.39
>>851
COUNTIF使ってないじゃんっていうツッコミはないのね。
853デフォルトの名無しさん:2013/03/28(木) 10:03:13.91
>>851
そういう風にMagBox使うなら行数制限くらいかけとこうよ
あとエラーのセルに色くらいつけようよ
854デフォルトの名無しさん:2013/03/28(木) 10:24:09.97
>>853
質問者が要求してないことは、提案として出すならまだしも、
いきなりコードに組み込んじゃうのは如何なものかと?

提案としてはどちらも正論だとは思うけどね
855デフォルトの名無しさん:2013/03/28(木) 10:49:11.68
お前ら自分はコード書かない癖して、いつも桃白白のコードにはけち付けるんだな。
コード書いてから言え。
856デフォルトの名無しさん:2013/03/28(木) 11:35:50.56
「ケチ」なら反論して論破しちゃえばいい
「正論指摘」なら素直に受け止めればいい

ただそれだけ
857デフォルトの名無しさん:2013/03/28(木) 12:49:08.55
ケチはケチであり、論ではないから反論など存在しないのだよ。
858デフォルトの名無しさん:2013/03/28(木) 13:24:53.47
なんだかんだ言って、このスレでは桃白白くらいしかコード晒す奴いないからね。
いろいろ突っ込まれたりするけど、無料レビューだと思えばいいんじゃないの。
859デフォルトの名無しさん:2013/03/28(木) 18:58:12.72
>>854
言われたとおりのコードしか書けないのかなとか思ってしまう。
本人がどう思っているかわからないけど。
確かにどこまで書くかっていうのがあるけど。
行数制限とかコードで書かなくても、コメントアウトで注意書きできるわけだし。

今回の質問であれば、コードをベタ書きする以外にも説明書きの列、IDの列を入力として
説明書きの列が空欄のIDのリスト(コレクション)を出力するプロシージャにする方法もあるわけで。

これだとID列、説明書きの列が変わっても入力の値をを変更すれば済む。
場合によっては別な列でも同じようなことがしたい時に使えるわけで。
いきなりコードを書き始める前に、ちょっと考える必要はあると思う。
860デフォルトの名無しさん:2013/03/28(木) 19:46:47.32
>>848
まずぱっと見て、後々言われそうな事が数点有るね。
まぁ、出力対象が5つくらいまでなら問題なさそうだけど。
納品先には取り敢えず、
何件くらいまで出力するのか。
重複を省くのは当たり前として、出力時のソートはどうするのか。
沢山出すなら、コピペ出来る様にするのか。
このくらいは確認した方がいいのかな。
勉強でやってるなら不要な心配だけどね。
861デフォルトの名無しさん:2013/03/28(木) 20:18:45.17
ここは質問スレで、プログラムを作成するスレではありませんよ
862デフォルトの名無しさん:2013/03/28(木) 21:17:58.22
>>851-854,859,860

レスありがとうございます
今回のは自分で使うので試行錯誤しながらやってます
エラーのセルに色を付けるのは自分で何とかなりそうです
MagBoxの行数制限や文字制限に関しては全く気が回らなかったです
出力のソートに関しては今回は特に問題になりません

>>851のコードを試してみたのですが
重複を省くのはどのようにしたらいいでしょうか?
それ以外は思った通りの動きをしてくれました
863デフォルトの名無しさん:2013/03/28(木) 21:22:39.93
>>862
丸投げかよ。
864デフォルトの名無しさん:2013/03/28(木) 23:19:44.40
>>862 一つの考え方として。
Dictionary使ってるからScriptingRuntime参照して。

Sub hoge()
Dim dic As New Scripting.Dictionary
Dim code As Variant
Dim mes As String
Dim i As Long
If Cells(1, 2) <> "" Then
For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, 5).Value = "" And _
Not dic.Exists(Cells(i, 2).Value) Then
dic.Add Cells(i, 2).Value, ""
End If
Next
865デフォルトの名無しさん:2013/03/28(木) 23:20:36.26
>>864の続き
If dic.Count = 0 Then
MsgBox "説明書きはすべて入力されています。"
Exit Sub
Else
For Each code In dic.Keys
mes = mes & code & vbCrLf
Next
MsgBox mes & "の説明書きが未入力です。"
Exit Sub
End If
End If
MsgBox "データが存在しません"
End Sub

Ninjaレベルが低くて一発で書けないし。
自分で言うのも何だけど雑。テストもしてないし。
866デフォルトの名無しさん:2013/03/29(金) 00:26:38.00
>>864
ありがとうございます
思った通りに動きました
こんなやり方もあるんですね
勉強になります
867デフォルトの名無しさん:2013/03/29(金) 01:59:07.54
>>848についてオートフィルタでダメなのか不思議
別に文句つけるつもりじゃないんだけと
868デフォルトの名無しさん:2013/03/29(金) 06:52:29.76
>>866
すまんがどういうところが勉強になったのかな?
お前が思っていたやり方とどう違ったのか、なんでお前のやり方が何でダメだったのか
理解したってことなのか?
それとも、表向き言葉は質問だったけど、本当は「作くれよ」ってことだったのか。

こういうやりとりを見てると質問スレというより宿題スレのように見えてしまう。
回答者は親切心でやているつもりなのかもしれないけど、全く本人の為になっていない。

宿題スレにしたいのなら別スレ立ててくれ。
869デフォルトの名無しさん:2013/03/29(金) 07:07:55.29
>>868
本人のためになったかどうかなんて
君の気にするところじゃないよ。
ExcelはIT技術者でないエンドユーザーが実務に迫られて
使っていることが多いのだから、回答の中身の理解よりも
問題の解決の方が本人にとっては大切。
そんなギスギスせずもっと大らかに参加しなよ。
870デフォルトの名無しさん:2013/03/29(金) 07:21:53.75
>>869
勝手にこのスレを解釈するなよ。
>>1★5を声をだして死ぬまで読んでろ。
871デフォルトの名無しさん:2013/03/29(金) 07:22:45.37
>>869
表面的な問題解決に放ってるけど、本質的な問題解決には全くなっていない。
872デフォルトの名無しさん:2013/03/29(金) 07:28:29.82
ギスギスしてんなあ。
表面の問題解決が一番本人のためじゃないか。
仕事が進むんだから。
人に知識を与えるのに報いを求めるような人は
ネットなんて参加しないでいいんだよ?
873デフォルトの名無しさん:2013/03/29(金) 07:33:42.12
世界は自分の思った通りには動かないんだよ。
気に入らないことを見たくないなら、2chなんかに来ないことをお薦めするよ。
874デフォルトの名無しさん:2013/03/29(金) 07:34:11.99
875デフォルトの名無しさん:2013/03/29(金) 07:36:20.55
876デフォルトの名無しさん:2013/03/29(金) 07:38:22.37
>>868
本人の為になったかどうかなんて、お前には関係ないよ
あと、この話引きずってこのスレ荒らすなよ?
877デフォルトの名無しさん:2013/03/29(金) 07:39:16.86
878デフォルトの名無しさん:2013/03/29(金) 07:41:14.50
このスレの初心者か?
力抜けよ
879デフォルトの名無しさん:2013/03/29(金) 07:43:56.88
ブログラマ板にあるからプログラマしか参加できないなんておかしい。
エンドユーザーがVBAを使って何が悪い。
むしろエンドユーザーのためにあるのがVBAだろ。
次スレからはテンプレの5を外すことを提案する。
堅苦しすぎる。
880デフォルトの名無しさん:2013/03/29(金) 07:48:07.36
881桃白白:2013/03/29(金) 08:38:17.67
ぜひともこのスレにて見識あるかたがたに
わたくしめの質問をお聞きいただき 
できますればご教導いただきたく存じまする
身勝手なお願いであるとは重々承知しておりますが
なにとぞよろしくお願いもうしあげまする る〜るる〜 みたいな

ご教授いただきたいという人に対して教授はやだ教示ならやるっていうのを
桃白白はよく見かける 掲示板で質問者の成長を第一に考えるっていうのは
なかなか難しいんじゃないか 質問者も回答者もはたしてそこまでする
必要があると考えている人がどれだけいるのだろうか 桃白白は疑問に思う
882デフォルトの名無しさん:2013/03/29(金) 08:39:41.47
>>867
なんでオートフィルタじゃなきゃダメだと思ったのか疑問
883デフォルトの名無しさん:2013/03/29(金) 08:51:14.11
>>881
君は皆に叩かれ突っ込まれながら成長したよね
VBA知識的にも、すぐムキにならず上手く躱せるという精神的な面でも

最初のころは感情的に吠えてばっかでまるっきり負け犬厨房だったけど
今は回答者の底辺に位置するまでになったからなぁ
884デフォルトの名無しさん:2013/03/29(金) 09:03:36.44
なんで底辺とか言いたがるかなぁ。
885デフォルトの名無しさん:2013/03/29(金) 09:03:56.62
マクロ使い始めた頃に、似た様なマクロ作った。
オートフィルタは適用範囲の指定が自動で効かない場合があるので、
そういう場合は範囲を手動で指定して、さらに指定が間違ってないか確認しなくてはならない。
手間もかかるし作業ミスが発生する恐れがある。
マクロ化するのに十分過ぎる理由だと思う。
886デフォルトの名無しさん:2013/03/29(金) 19:47:39.47
いいんじゃない?丸投げ。
無視しても怒ったり文句言ったりしつこくしたりしなければ。
887デフォルトの名無しさん:2013/03/29(金) 19:56:15.11
>>886
丸投げがあってもスルーすればいいだけなんだけどそれができないアホがいるから始末が悪い。
888デフォルトの名無しさん:2013/03/29(金) 21:02:30.56
コードを書いてもらうことによって
初心者はやりたいことのアプローチの仕方が分かって
そこから調べたり出来るから良いと思うけどね。
最初はどうアプローチしてどのキーワードでググればいいかも
解らないからね。
889デフォルトの名無しさん:2013/03/29(金) 21:49:29.64
>>888
コードが必要とはそんなに思えないけど。

「○○のやり方がわかりません」とかいう表面上の質問に
何がどう分からないのか不明のままコードを提供する。
で、「勉強になりました」とかどういう勉強になったのか明かさず、どう考えても質問とは思えない。
ようは質問とは名ばかりで、コード作成依頼をしているのと同じ。
質問の体をなしてない。

コードを提示してもらってあえてググッたりするとは皆無だと思うけど。
質問者?は質問ではなくコード作成依頼をしてきてるわけで、
マクロが動けばいいという認識だからね。
890デフォルトの名無しさん:2013/03/29(金) 21:54:05.79
やっぱり>>1★5は次スレから削除かね。
丸投げお断りな人は別にスルーすればいいだけだし、
学ぶことを押し付けるのもやっぱり何だしね。
VBA自体は言語の中でも比較的初心者でも取っ掛り易い言語なのに
間口を狭めてしまうことになりかねないのかな。
891デフォルトの名無しさん:2013/03/29(金) 22:05:23.28
約1名が、自演で何人も居るように見せかけながら
>>1★5叩き&印象操作を頑張ってるけど
コードクレクレ君にとって都合が悪いだけで、何の問題もない
892デフォルトの名無しさん:2013/03/29(金) 22:17:11.14
>>890
コード作成依頼は別のところでやってくれ。
ってかさ何で別スレ作ろうとしないんだ?
荒らしの居座る典型的なパターンなんだが。

>>891
だね。コードクレクレ君が都合悪いから反対してるだけにしか見えないね。
893デフォルトの名無しさん:2013/03/29(金) 22:22:37.49
>>891
別にクレクレでもいいと思うよ。
昨日のコードも>>862がコードで書いてと頼んだ訳じゃなくて
私が勝手にやった事だし。
コード書いてと言われても書く義務は無いけど、
頑なに拒絶する理由も無い。
894デフォルトの名無しさん:2013/03/29(金) 22:53:26.28
>>893
誰だよお前
895デフォルトの名無しさん:2013/03/29(金) 22:55:25.00
>>894
俺だよ俺、俺
896デフォルトの名無しさん:2013/03/29(金) 23:01:44.47
>>893
こういうのが質問者が書いてと頼んでいなかったとしても、お前の行動がいかにも質問者が
コード作成依頼をしているように見せてしまっているのだが。
いい加減別スレ立てたら?

【コード作成】どんとこい Excel VBA【無料で承ります】
897デフォルトの名無しさん:2013/03/29(金) 23:09:19.78
>>896
別スレを立てる理由が見当たらない。
許容すればいいだけだよ。
何でそんなに頑なに拒絶するの?
荒れるとか言ってたけど、
冷静に見てここの数レスで荒らしているのは拒絶している人の方に見えるけど?
898デフォルトの名無しさん:2013/03/29(金) 23:24:22.62
>>897
いい加減さ、お前のマスターベーションは見たくないんだよ。
やってることはコード作成依頼の対応だろ。
質問スレなのに質問をどうするかなんて関係なくなっちまってるんだよ。

「動くコードを作ればいいんだろ」って考え方がもうこのスレのテンプレからかけ離れてる。

お前がどう思おうが関係なし。全ては>>1が正しい。それが2chの掲示板。
それに従えないということなら別スレ立てればいいだけのこと。
899デフォルトの名無しさん:2013/03/29(金) 23:32:13.66
>>898
まぁ、私にとってそんなに重要なことではないからこれ以上は言わないよ。
消すか消さないかはどっちにしたって次スレ立てる人に委ねるしかないしね。
でもそこまで言わせるって、以前一体何が有ったのかって思っちゃうよ。
900デフォルトの名無しさん:2013/03/29(金) 23:35:36.82
>>898
お前まじでうざいわ。
自分が荒らしだって気づいてるか?
嫌ならこのスレにくるなよ。
901デフォルトの名無しさん:2013/03/29(金) 23:41:03.69
>>889
何で何がどう勉強になったか、お前に説明する必要があるんだよ
お前ちょっとおかしいんじゃねーの?
俺は俺の知らない誰かが、勉強になったかどうかなんてちっとも気にならんが
902デフォルトの名無しさん:2013/03/29(金) 23:44:12.03
なにこの人怖い
903デフォルトの名無しさん:2013/03/29(金) 23:46:41.44
最近どのスレいっても自己顕示欲の人がいるように見える
904デフォルトの名無しさん:2013/03/29(金) 23:50:04.13
>>903
全部同一人物だったりして。
いずれにせよ、テンプレ原理主義は荒れるからやめてほしい。
905桃白白:2013/03/29(金) 23:50:08.27
>>899
最近スレ盛り上がってたから>>898はそれをみて興奮してるんだろう
ひきつけみたいなもんだ まわりの雰囲気を無視して教条主義的に
ルールを適用しようとするあたり軽度のADHDなんじゃないか
906デフォルトの名無しさん:2013/03/30(土) 00:01:42.50
コードを書いてレスするののどこがいけないのかさっぱりわからん。
疑問質問にくどくど日本語で説明するより、コード書いた方が楽じゃん。
907デフォルトの名無しさん:2013/03/30(土) 00:03:54.82
VBAって親切だから演算オーバーフローが出ると
「オーバーフローだからな」って谷桃子みたいにビンタしてくれるんですごく良い

って思いませんか???
908デフォルトの名無しさん:2013/03/30(土) 00:06:32.22
>>900
お前もウザイと思ったらこのスレこなきゃいいのにww
909デフォルトの名無しさん:2013/03/30(土) 00:08:50.03
>>901
勉強になったというより質問の体をなしていないということが問題といっているのだが。
スレタイちゃんと読めてるのか?日本語読めるか?
910デフォルトの名無しさん:2013/03/30(土) 00:11:56.67
>>906
全然ダメ。
ってかさなんでコードでレスしないんだ?www
コード書いたほうが早いんだろ?
911デフォルトの名無しさん:2013/03/30(土) 00:14:15.57
>>899
こういうアスペが寄り付かなくなるなら
俺も消すのに賛成だわw
912デフォルトの名無しさん:2013/03/30(土) 00:18:33.22
>>909
百歩譲って質問の体をなしてないとしようか。
それでお前は何が困るんだ?
今までもこんな質問山のようにあったし、これからもあるぞ。
お前はその都度いちいちイチャモンつけてスレ荒らす気?
913デフォルトの名無しさん:2013/03/30(土) 00:20:49.98
>>910
ん?コードでレスすることよくあるけど?
914デフォルトの名無しさん:2013/03/30(土) 00:25:35.82
>>911
消すべきだね。
じゃないと何度でもテンプレ
盾に取って暴れるよこの人。
915デフォルトの名無しさん:2013/03/30(土) 08:55:51.84
>>913
なに日本語でレスしてんの?
コードでレスするほうが楽なんだろ?
916デフォルトの名無しさん:2013/03/30(土) 09:08:35.42
>>915
アスペなの?
コードなんかいらないって奴がいたから、技術的な質問には日本語で説明するよりコードのが楽って言ったんだけど
917デフォルトの名無しさん:2013/03/30(土) 09:44:42.51
結局この人、なんで1★5を消しちゃいけないのかまともに説明してないんだよね。
体をなさなくなるとかいって、昨日の朝からずーっとこのスレが体をなさなくなるように
荒らし続けているのも意味が分からない。
918デフォルトの名無しさん:2013/03/30(土) 10:51:41.06
>昨日の朝からずーっとこのスレが体をなさなくなるように荒らし続けて

一旦スレ埋めて自分で立てて乗っ取るんですね
919デフォルトの名無しさん:2013/03/30(土) 15:47:58.92
ま、スレが埋まった後新スレのテンプレに★5が削除するという行為はできないと思う。
>>1のテンプレが正義ということを肯定してることになるからね。
結局何かあったらテンプレに書いてないだろとか言い出しそうだw
920デフォルトの名無しさん:2013/03/30(土) 16:31:55.06
>>919
テンプレに悪も正義もないよ。
皆で楽しくやっていく為に作られた取り決めなだけ。
今回の様に>>1★5が有ったが為に、誰もそれを守っていない者など居なかったのに
勘違いした人が執拗にテンプレを盾に取って荒す者が出れば、
当然皆それについて話すし、その時の流れで決まる。
そもそも、息の長いスレではテンプレに全く改修が入らない方が珍しい。
921デフォルトの名無しさん:2013/03/30(土) 16:50:33.15
どっちでもいいけど
★5が入って昨日の荒しがドヤ顔で
やっぱり俺の言ったことは正しかったってみんな認めてるだろwwww
とか出てきたら超ムカつく
922デフォルトの名無しさん:2013/03/30(土) 20:47:49.18
自分もエンドユーザーだけど、本業が忙しく、作成時間も限られている
為、コード書くのは、客が長めのクレーム電話かけてきたときに、
うわのそらで適当に相槌いれながら、作ってたりするな。

細かい原理とか、多少の効率の悪さより、使えるレベルで即動作するこ
とが最優先。大抵はネットに知りたいことがのってるから、このスレで
質問したことはないけど、コード記載して回答してくれるのは、
現場の人間にはありがたいんじゃないか。
923デフォルトの名無しさん:2013/03/30(土) 20:49:07.60
何のいい訳だよ
924デフォルトの名無しさん:2013/03/30(土) 21:12:44.03
>>922
こういうので後で痛い目を見るのだが。
それが本人であればいいんだけど、これが別の担当になったりすると精神的によくない。
925デフォルトの名無しさん:2013/03/30(土) 21:50:03.23
そんなことより
昨日俺らの方がひどい目に合わされている訳だが
926デフォルトの名無しさん:2013/03/30(土) 22:29:13.78
VBA初心者ですが
2週間かけて5000行のVBAコードを書き上げましたが
実行するとほぼ1舜で処理が終わってしまい正しく動いているのかどうか全くわからないのですが
一体どうすればいいのでしょうか?
927デフォルトの名無しさん:2013/03/30(土) 22:34:31.49
>>924
自分の残業が減ればいいので、自分の担当でなくなれば、
プログラム消してから異動すれば問題ない。
しょせん、事務職だしね。

立つ鳥、跡を濁さずってやつです。
928桃白白:2013/03/30(土) 22:41:06.43
>>926
ところどころにDebug.Printを挿入して
お茶を飲みながらイミディエイトウィンドウを眺めてうひょー動いとるのー
と言えばいいじゃん
929デフォルトの名無しさん:2013/03/30(土) 22:42:02.18
>>926
自分の作っているものが合っていれば、
結果こうなる筈だってのは無いの?
930デフォルトの名無しさん:2013/03/30(土) 22:54:25.32
>>928
>>929
セレクトケースで分岐してる箇所が500箇所ぐらいあり結果に応じてそれぞれが行き交うようになってますので中間作業が正しく動いてるのかどうかを調べるのは至難の業のようですね、
全肯定でログを書き出すようにするとかあの手この手で色々やってみます。
>Debug.Print
試して見ます。ありがとうございます。
931デフォルトの名無しさん:2013/03/30(土) 23:15:04.04
分岐だらけでテストをするのも途方に暮れるコード・・・
何か物凄く嫌な予感がするな
932デフォルトの名無しさん:2013/03/30(土) 23:22:14.24
>>924
職業SEじゃないから、自分がいなくなった後まで、プログラムを残しとく
必要性もないしな。

会社だって、エンドユーザーが業務システムをDOM操作して、自動作業してる
とは思わないだろう。
そもそもDBへのアクセス権も、ソースが見れる状態でもないわけだし。

後任は、手動でやることになるからたいへんかもしれないが、まあそれが
本来の事務だから、頑張ってもらうしかない。

たとえ、残したところで、普通の事務職は保守などできないだろうし、下手に残し、
法改正などで、修正が必要なのに気づかずに使われて、責任とらされても困る。
933デフォルトの名無しさん:2013/03/30(土) 23:22:42.36
>セレクトケースで分岐してる箇所が500箇所ぐらいあり

後で保守させられる人間になりませんようにナムナム
934デフォルトの名無しさん:2013/03/30(土) 23:40:22.41
俺なら余裕
935デフォルトの名無しさん:2013/03/30(土) 23:43:45.61
そもそも、500通りも別々の処理なんて本当にやってんのかね?
サブプロシージャにしたら適当な引数渡して処理できそうな気がする。
936デフォルトの名無しさん:2013/03/30(土) 23:51:46.36
>>930
F8
937デフォルトの名無しさん:2013/03/30(土) 23:52:37.05
>>926
ブレークポイント
938デフォルトの名無しさん:2013/03/31(日) 00:01:05.78
>>930
>セレクトケースで分岐してる箇所が500箇所

別スレでエクセルでビックデータ解析するんだとか言ってたおっさんですか?
939桃白白:2013/03/31(日) 01:31:01.03
セレクトで分岐する数が2つだとしてもそれが500あったら
分岐の組み合わせは2の500乗で超大変じゃん
セレクト文ごとに関数を分割してそれぞれの分岐が正しく行われるか
だけチェックしてあとは状態が変わる境界値を放り込んで全体の動作をチェックして
完璧だと宣言するべきだと思うんだよね 桃白白的にはそうするべきだと思うの
みんなだったら>>930のようなときどうする? 
940デフォルトの名無しさん:2013/03/31(日) 01:55:50.45
926の5000行のコードだけど、それだけ長いとどれほどのことが出来るんだろう
941デフォルトの名無しさん:2013/03/31(日) 03:46:03.43
>>939
大体考え方として同じ。
でもその前にObject 指向で言う所のリファクタリングかなと。
Vbaでは何て言うんだろ。
942桃白白:2013/03/31(日) 04:01:10.19
>>941
VBAでも変わらんでしょ リファクタリングってテストがないとできないんじゃね?
943デフォルトの名無しさん:2013/03/31(日) 04:34:25.63
>>932
引継ぎなしかよw
944デフォルトの名無しさん:2013/03/31(日) 04:59:31.85
>>930
何も考えずにDebug.Print入れるのに大変苦労すると思う。
それなら、分岐が全部通るテストデータを作ってどこが通ってどこが通らないという
絞り込みをしてから、Debug.Printをいれたほうが効率的だと思うけど。
ってか>>929が言ってるとおり、まず、正しい結果が得られているのかわからんのだが。

正しい結果は得られているのかな?

5000行のコードだとか、Select Caseの分岐箇所が500箇所とかあまり関係ないと思うけど。
まずは一パターンの正常系の処理が動いているか判断したいだけなら、Debeg.Printより
コードの一番先頭にブレークポイント貼ってからステップ実行すればいい。
>>936,937はデバッグのことを言ってるわけだけど全く無視されちゃってるし。

この後に、Debug.Print1000行入れたのに殆ど出力されません。とか言ってきそうな予感。
945桃白白:2013/03/31(日) 05:02:31.02
>>944
テンプレがどうとかで荒らすのはやめたのか? あ?
946デフォルトの名無しさん:2013/03/31(日) 05:23:11.45
>>945
その件に付いては、このスレの住人は
>>1★5に付いて比較的どうでもいい人、
要らないと思ってる人が殆どみたいなんで、
次スレ立てるときにしれっと「荒すなら出ていって下さい」的な
文言に置き換えておけばいいと思ってるの。
947桃白白:2013/03/31(日) 05:30:04.88
>>946
なにいってんだお前が質問者のためになってないとか
なんとかいって荒らしてたんだろ 違うか?お?
948944:2013/03/31(日) 05:45:21.72
>>939
VBA初心者に境界値がどうのこうの言っても分からんでしょ。
レスを見る限りデバッグの仕方が分からないと言ってるようにしか受け取れないんだが。
ステップ数とか分岐の数とかに誘導されすぎ。
>>930は分岐の数は多かろうと普通にデバッグ&テストデータを増やすでいいと思うよ。

>>945
すまん。何言ってるのかわからない。
949桃白白:2013/03/31(日) 05:48:30.94
>>948
                   平成25年3月31日
Excel VBA 質問スレ Part28 >>944
                        桃白白

          念書

平成25年3月31日(日)午前5時2分、桃白白は人違いをし
>>944様に暴言を吐きました。

>>944様の気分をいちじるしく害すとともにスレの空気を
悪くしスレを利用されておられるみなさまに多大なるご迷惑
をおかけしました。

桃白白が勝手に思い込みそれをなんの疑問も持たずに書き込む
という桃白白の日頃からの軽薄な行いが原因にあることは明白であり、
>>944様ならびにスレのみなさまに心からお詫び申し上げます。

今後は書き込みを行う前に根拠がじゅうぶんであるか
考えて書き込みを行うよう肝に銘じ、二度とこのような失態を
繰り返さないことをお誓いいたします。このたびにかぎり
寛大なお心でお許しくださいますようお願い申し上げます。
                         以上
950946:2013/03/31(日) 06:05:05.41
俺もよく分からない。
>>944じゃないし。
951デフォルトの名無しさん:2013/03/31(日) 06:06:14.54
こういう文書で、最後に「以上」とだけ書くのは失礼に当るぞ
友人や同僚との日常的なメールの締めくらいならいいけど
得意先や上司相手はもちろん、親しき仲でも冠婚葬祭などの改まった場や
謝罪文などを「以上」で締めるのも非常識な行為

本音ではなく嫌味で>>949を書いてるなら、嫌味ったらしさが引き出されて効果抜群だがな
952桃白白:2013/03/31(日) 06:10:10.75
>>950
しらばっくれんな 桃白白は>>944に対して質問をし
お前はそれに答えたのだから論理的な帰結として
お前は>>944だ 違うか?
953桃白白:2013/03/31(日) 06:12:57.90
>>951
え? そういうもんなの? それは知らなかったわ
以上付けたら失礼になるの? まじで〜 謝罪文が失礼とか
もう救いようないじゃん 桃白白超かわいそ〜
954946:2013/03/31(日) 06:21:20.58
>>952
横槍で済まんかったけど本当に違うんだ・・・。
勿論あの時のアスペ君でもない。
俺は別にいいけど、>>944にはもう一度謝っておいた方がいいと思うよ。
955桃白白:2013/03/31(日) 07:16:54.23
                 平成25年3月31日
Excel VBA 質問スレ Part28 >>944
                       桃白白

          始末書

平成25年3月31日(日)午前5時30分、桃白白は本来
>>944様に返信するべきところを間違って別のかたに返信し、
度を越えた発言を行い、>>944様また>>946様の会話を阻害し
>>944様また>>946様に不快な思いをさせ、ご迷惑をおかけしました。

この不祥事は桃白白の身勝手な思い込みと慎重さを欠いた言動が
原因で生じた事態です。まことに申し訳ございませんでした。
心からお詫び申し上げます。

今後はスレのみなさまの円滑な会話の進行とスレのみなさまの
調和を第一に考え、節度ある発言を心がけます。深く反省して
おりますので寛大なご処置を賜りますようお願い申し上げます。
956デフォルトの名無しさん:2013/03/31(日) 07:26:57.63
このスレが盛り上がるのって、大体こういうVBAと関係ない話題の時だよね。
ほんともうテンプレ見直す時期かもね。
957デフォルトの名無しさん:2013/03/31(日) 08:11:54.75
なんでそこでテンプレの話に繋がるんだ?
どんだけテンプレ変えたくて必死でウズウズしてるんだよw

テンプレっつーか>>1が効果あったら
「ExcelのVBAに関する質問スレです」に従ってこんな流れにはならないわけで
故に時々脱線して盛り上がることは、テンプレを変えたって避けられないよ
958デフォルトの名無しさん:2013/03/31(日) 08:31:02.27
テンプレ云々の話が嫌なら「VBAなんでも質問スレ」でいいんじゃね?
959デフォルトの名無しさん:2013/03/31(日) 09:11:28.87
>>956
起きてもいない事象をアスペが勘違いして荒らさなければ
テンプレを盾に取って荒らしまわる奴もいることが露見されることは無かったからね。
要するに、消しても問題が出るかもしれないけど、
今の状態で既に問題アリアリだってことだよね。
少なくとも改変はしないとね。
960デフォルトの名無しさん:2013/03/31(日) 09:21:58.87
掲示板のルールに従えない奴がコードでレスする。
まともなコードとは到底思えないけどw
961デフォルトの名無しさん:2013/03/31(日) 09:24:13.93
>>960
必死過ぎワロタw
じゃそのルールが変わってもちゃんと守れよw
962デフォルトの名無しさん:2013/03/31(日) 09:30:55.08
>>961
必死なのでスレ立てておいたよw

Excel VBA 質問スレ Part29
http://toro.2ch.net/test/read.cgi/tech/1364689772/
963デフォルトの名無しさん:2013/03/31(日) 09:35:34.63
>>962
GJ
964デフォルトの名無しさん:2013/03/31(日) 09:38:58.16
>>962
住人の意見をシカトしてやっちまったか。
基地外だな。
965デフォルトの名無しさん:2013/03/31(日) 11:25:32.63
両方の意見があるんだから、どっちを取ってもいいんじゃないの?

というか自分の意見と違う結果になっただけで他人を基地外扱いする奴こそ
本当の基地外だと思う
966デフォルトの名無しさん:2013/03/31(日) 11:50:09.64
本物のキチガイの思考
967デフォルトの名無しさん:2013/03/31(日) 12:33:02.34
>>965
ここ数日の流れでは、1対多にみえるが。
それを同等の意見と見なすのはどうかと思うよ。
968デフォルトの名無しさん:2013/03/31(日) 12:49:35.37
>>943
自分が前任者から引き継いだものをそのまま引き継ぐ。

自分が作ったVBA資産は消去。本来の事務の流れに戻るだけ。
経営者でも職業SEでもないから、それでかまわないし、後任が残業したくないなら、
自分でナントカすると思う。

まあ、自分でナントカする気の人なら、自分の資産を引き継がせて、保守を任せて
もかまわないわけだけど、事務職でそこまで手をのばす人はなかなかいない。
969デフォルトの名無しさん:2013/03/31(日) 13:00:17.80
VBAいじる職種はたいてい片手間だからな
本業のヘルプデスクとかセットアップとかで手が回らん
970デフォルトの名無しさん:2013/03/31(日) 13:07:05.17
自分の業務範囲で自分がラクする為のVBAは作るのも使うのもお気楽でいいんだけど
人に使ってもらうVBAを作るのはしんどい
971デフォルトの名無しさん:2013/03/31(日) 13:08:42.87
VBAいじる職種には、運用改善も大事な業務。
ボーナスとかに影響するけど
運用改善ってのはアイデアを出すだけじゃなくて
実際にそれが当たり前のことになるまで全部面倒を見ないといけない
972デフォルトの名無しさん:2013/03/31(日) 13:27:34.79
>>967
> ここ数日の流れでは、1対多にみえるが。
多分、どちらかに偏ってる人たちは、お互い1対多で自分の方が多勢だと思ってるよ

どっちでもいい派から見ると、どっちも2,3人ずつっぽいが
973デフォルトの名無しさん:2013/03/31(日) 13:40:36.13
自分の本業は窓口業務。
督促業務とか、苦情受付とか、電話相談、制度説明などだわ。
日中はそれで潰れる。

まわりでVBA作成しているのは、自分くらい。
入力業務やお知らせ作成業務などもあるので、VBAあるのとないのとでは大違い。
974デフォルトの名無しさん:2013/03/31(日) 13:49:21.60
>>973
ほぼ同じだが、入力業務やお知らせ作成業務とかはほとんど無い
VBAは、苦情受付・電話相談・制度説明のために作る
残業でセットアップや運用改善にあたる
975デフォルトの名無しさん:2013/03/31(日) 13:52:49.27
こんなつまらん議論でスレが消費される事の方が問題だわ
976デフォルトの名無しさん:2013/03/31(日) 13:53:35.72
>>974
VBAを苦情受付・電話相談・制度説明で活用?
うーん、想像つかない。VBAだとむいてなさそうだけど、電話の記録を残しておくのに使ってるってことかな。

入力業務は業務システムをVBAでDOM操作、お知らせ作成は業務システムからはきだされたCSVで自動作成って
いう使い方しか、うちはしていないな。
977デフォルトの名無しさん:2013/03/31(日) 13:59:05.19
カンマ区切りで改行があるレコードだけ”で囲ってあるCSVを上手に読む方法ってあるかしら
一文字ずつ読み込んで処理するしかないのかしら
978デフォルトの名無しさん:2013/03/31(日) 14:09:37.99
>>976
苦情受付・電話相談・制度説明は全部AccessDBに保存・入力されるようになってて
履歴を検索して回答することが多い
979デフォルトの名無しさん:2013/03/31(日) 14:17:28.41
>>975
いつもつまらん話題だが何か?
980デフォルトの名無しさん:2013/03/31(日) 14:23:03.89
>>975
おもしろい議題くれよ
981デフォルトの名無しさん:2013/03/31(日) 14:34:33.59
>>977
csvファイルダブルクリックで普通に読み込めるけど、どういう点が気に入らない?
982デフォルトの名無しさん:2013/03/31(日) 14:56:39.20
>>977
ADOとか使ってテキスト用のドライバで読むとかあるけど
CSVって結構こまかいフォーマットが違うからなぁ
改行含んでたり、特定項目だけクォートありとかならやってみないとうまく行くかわからん
983デフォルトの名無しさん:2013/03/31(日) 14:57:15.41
EUCの話はさすがにスレ違いだろ
マ板でやってくれよ
984デフォルトの名無しさん:2013/03/31(日) 15:01:49.74
>>977
セル内の改行と、行の終了の改行は改行コードが違う。
セル内の改行コードはvbLfで行の終了を表す改行コードはvbCrLf。
985デフォルトの名無しさん:2013/03/31(日) 15:01:56.93
>>981,982
改行コードが複数種類入っているのか、途中でズレてしまうんです
986デフォルトの名無しさん:2013/03/31(日) 15:06:47.14
>>972
テンプレ原理主義者はさすがに三人はいないでしょ。
居て二人。
俺の見立てでは一人。
987デフォルトの名無しさん:2013/03/31(日) 15:11:57.70
>>986
見えない敵に必死すぎw
988デフォルトの名無しさん:2013/03/31(日) 15:15:39.12
>>984
それはWindows標準の場合
マック版だったり、CSVを作ったシステムやプログラムによってはそうとは限らんかもしれん
その辺厳密にやりたいなら自分で読み込んで解析するしかないんじゃね
989デフォルトの名無しさん:2013/03/31(日) 15:16:48.25
え?
俺には見えてるんだけど、お前には見えないの?
990デフォルトの名無しさん:2013/03/31(日) 15:16:57.20
>>972
どっちにしても、審議中に皆の意見を無視して立てたことに変わりはない。
馬鹿なことをしたもんだ。
991デフォルトの名無しさん:2013/03/31(日) 15:17:10.42
>>986
きっと相手方はその逆のこと思ってるぜw
992デフォルトの名無しさん:2013/03/31(日) 15:24:50.66
>>988
というか、項目内改行コードがLFだというほうが特殊で、CRLFで改行されるのが普通。
が、項目内改行はおろか、行端の改行もLFの可能性があるのがCSVの悪いとこで、
結局自前でパースしろって結論になるわけだが。
993デフォルトの名無しさん:2013/03/31(日) 15:27:07.01
>>991
相手っていってもお前も含めて一昨日の荒し1人だけだけどな
994デフォルトの名無しさん:2013/03/31(日) 15:28:55.19
うめ
995デフォルトの名無しさん:2013/03/31(日) 15:30:50.68
>>993
もうやめてあげて。
996デフォルトの名無しさん:2013/03/31(日) 15:34:28.15
どっちかというと、VBAで仕事を改善した俺すごいでしょ、でも俺が居なくなるとき消すもんね
的なコメントの方が★5を守れっていってる奴より腹立つね
997デフォルトの名無しさん:2013/03/31(日) 15:35:28.75
>>984
セル内の改行コードはvbLfでもvlCrLfでもどっちでもいけちゃうはず
998デフォルトの名無しさん:2013/03/31(日) 15:36:13.59
いや別に。
荒らしたりとかの実害ないし。
999デフォルトの名無しさん:2013/03/31(日) 15:38:11.77
>>996
仕事を引き継げばいいだけの話であって、VBAまで引き継ぐ必要性は無いでしょ
1000デフォルトの名無しさん:2013/03/31(日) 15:39:22.38
1000なら桃白白が実は・・・
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。