[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 12/08 08:49 / Filesize : 136 KB / Number-of Response : 496
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part11



1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ]
Excelの「VBA」に関する質問スレです

前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/

★1 質問をするときはOSとExcelのバージョンを必ず書きましょう

★2 わからなければとりあえず「マクロの記録」をしてみましょう

★3 丸投げのプログラム作成依頼は受け付けていません

★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです
    Excel総合相談所 82
    pc11.2ch.net/test/read.cgi/bsoft/1241825062/

2 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:06:41 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/

3 名前:デフォルトの名無しさん [2009/05/10(日) 02:30:44 ]
卒研でVBAを使用することになったんですがお勧めの初心者向けのテキスト(教科書)教えてくれませんか?
当方一年授業で学んでオセロつくったくらいです


4 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 05:12:26 ]
★5 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

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

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

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


5 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 05:27:12 ]
>>4は同意されたものではないので、無視してかまいません。

6 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:23:15 ]
>>4に同意する

7 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 08:46:57 ]
★7は必須だろ

8 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:03:06 ]
>>4
ExcelVBAからADOを使ってmdbのデータを読む、なんてのは含まないんだね

9 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:20:46 ]
APIの話も、Excelから呼び出すなら良いと思うけどな。
具体的なAPI詳細とかなら、専用スレに誘導すりゃ良いし。

10 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 19:54:55 ]
EXCEL2003とXPを使用しています
デバッグのステップインでF8を押して進めるとすべて問題なく処理が完了するのですが
マクロの実行でやると
実行時エラー424オブジェクトが必要です
という物が表示されてしまいます

何処の変数がオブジェクトにしないといけないとか判断する方法はないでしょうか?



11 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:15:31 ]
「実行時エラー424オブジェクトが必要です」
って表示された時に処理止まっているんじゃないの?

12 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:04:45 ]
デバッグのF8連打のステップインの時は全く問題なく終了(ループ)するんですよ、、、、
実行でもたまに上手くいくんですが大半がエラー424になって

なんでデバックだと上手くいくのに実際だとエラーが出るんだろ、、、、と思いまして

13 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:27:43 ]
ブレイクポイント入れてないのに勝手に止まったりすることあるよ

こまかいことは(ry

14 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:44:49 ]
スクリプトうpれ

15 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 03:27:13 ]
通信に関係あるプログラムじゃね?WEBとかデータベース鯖とか。

相手の準備が出来たかどうか、データの取得が完了したかどうか
ちゃんとステータスチェックせずに次に進むと成功したり失敗したりするし、
F8連打だとそれだけで時間稼ぎになるから失敗しにくくなる。

16 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 04:58:31 ]
処理が止まった行の

xxx.Value = yyy
または
yyy = xxx.Value

のxxxに問題あり?

17 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 07:31:15 ]
>>10
あるねぇ
>>15の通り、相手の準備が出来てないっての。通信に限らずオブジェクトの描画か何かでも起こった気がする
ループ使ってるならloopやnextの上の行辺りに
Sleep 100
とか入れて見ると解決した気がする
ループじゃなければちとわからん

18 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:23:34 ]
初心者丸出しのコードでもいいでしょうか?



19 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:03 ]
Sleep 100とか入れちゃう初心者じゃなければいいよw

20 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:06 ]
友人の持って来たノートPC、XP,Office2000だと
実行を40回ループさせても実行時エラー424オブジェクトが必要です
って表示されない、、、、

OFFICE2003が何か悪さしてるのかな、、、、



21 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:22 ]
>>18 = >>10か?
どんな行で止まったかだけでも分からないと推測で答えるしかない

22 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:13:53 ]
>>21
はい昨日424エラーが出ると言った者です

皆さんの予想通りWEBにアクセスしてデータを持ってくるという物を作ろうとしています

エラーが出るところは行はランダムなのですが

Set IE = CreateObject("InternetExplorer.Application") 'ココ
IE.Visible = False 'ココ

If CODE = "" Then
MsgBox "コードがありません"
Exit Function
Else

TARGETURL = "stocks.finance.yahoo.co.jp/stocks/detail/?code=" & CODE
IE.Navigate TARGETURL
While IE.busy = True Or IE.readyState <> 4: DoEvents: Wend 'ココ
Set objTableItem = IE.document.GetElementsByTagName("TABLE")
CLOSEPRICE = objTableItem.Item(0).innertext
AccessYahoo = GetCloseData(CLOSEPRICE)
'Debug.Print CLOSEPRICE
End If

 'ココと書いてある IEオブジェクトを触ろうとすると出るということがわかりました

23 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:24:34 ]
あー自分も同じような事をしてるよ!w

うちはXPでOffice2000なんだけど・・・

Officeのバージョンとかは特に関係なくてIEが立ち上がりきっていない場合にそういうエラーでますよ。
自分はエラーハンドラで回避しているけどね。

24 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 12:40:48 ]
OfficeよりもIEのバージョンのほうが問題か?
IE7だと重くて起動遅いとか

25 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:47:43 ]
IE7というより自マシンの環境によるんじゃないのか?

26 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:02:44 ]
>>23
ありがとうございます
エラーハンドラーっていうのがあるんですね
ちょっと調べてみようと思います



512MBのメモリのとき妙に424エラーとメモリ不足ですというのがでて
友人の2GBでは何もエラーをはかずに処理が終わる
1GB借りて512MB→1GBにしてみるとなぜか424エラーは出なくなった、、、、
気持ち悪いけどメモリ増やすと問題なく動くみたいです



27 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:13:16 ]
>512MBのメモリのとき妙に424エラーとメモリ不足ですというのがでて

424はよく分からんがメモリ不足は後始末がちゃんとできてないと起こりやすいな
Set XXX = ○○と書いたらSet XXX = Nothing で開放しとかないとだめ
同じ変数にSetしなおしても上書きはされずにメモリを掴んだままになるらしい
やってるよな?

28 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:05:50 ]
Set XXX = Nothingって処理が終了すれば自動解放されるからなくても大丈夫だけどね

29 名前:デフォルトの名無しさん [2009/05/11(月) 18:10:04 ]
起動時に全シートの固定行数(SpritRowプロパティ)を求めているのですが、
グラフ等がアクティブになっているとプロパティ無しエラーになります。
On Error 以外で シートがアクティブになっているかどうかを判定する方法が
ありますでしょうか?

30 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:14:19 ]
>>28
そう思って書かないことが癖になると危ないと思うんだがw

っていうかあの時はマジでやばかった(謎



31 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:18:25 ]
>>29
TypeName(Selection)
でどうかな?

32 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:28:39 ]
>>31
素早い対応、有難うございます。


33 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:59:21 ]
>>27
確かに
Set IE = CreateObject("InternetExplorer.Application")
のあとに解放せずに
何十回もAccessYahoo(コード番号)で呼びまくってました
よくない癖は早めに直さないといけないですねありがとうございます

34 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:46:02 ]
IEをCreateObjectしてURLを開くのと
Workbook.Open Filename:=URLで開くのは
どこが違うんだろうか

35 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:40:54 ]
IEはQuitしてやらんと、終了しないだろ
非表示のIEがいっぱい残ってるんだろ
ttp://www.forest.impress.co.jp/article/2006/02/06/okiniiri.html
これで一覧してみな

36 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:52:38 ]
>>35
XP,Office2003で確認してみたのですが
2003はIE.quitをしなくても
自動的に消えてくれるようです


2000でも使う可能性があるのででIE.quitをAccessYahoo(コード番号)の最後に追加しました
ありがとうございます
IE.Quitはvisible をFalseにしたら不必要だと思ってました

37 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:12:19 ]
>>36
ウィンドウを閉じる(終了する)のと見えなくするのは違うぞ。
プロセスはちゃんと終わらせなきゃいけない。

38 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:24:47 ]
>>36
解放で自動的に消えてくれるかどうかは、officeやosのverより、
むしろieのverによると思うけど、うちのie8では消えないみたいよ
消えたかどうか何で確認してるの?
>>37
ieはプロセスに同居するから、インスタンス

39 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:57:57 ]
>>38
>>35さんが教えてくれたMenuBar.HTAで確認してみました


40 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:55:01 ]
VBAでフォームだけ入力することは可能でしょうか?

やりたいと思っていることは
ログイン、画面推移までは自分でIEを立ち上げて手入力でして
チェックボックスやテキストボックスにはVBAの入力ボタンを押すと自動的に
入力されてsubmitし最終確認画面が出るようにしたいと思っています

現在IEで表示している画面の要素をIEオブジェクトに取り込むということはできるものでしょうか?




41 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:30:20 ]
>>40
SendKeysとか使うくらいしか思いつかんな

42 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:30:46 ]
再読込するから無理だった気がする

43 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:07:50 ]
ありがとうございます

なさそうですか、、、
最初からVBAでIE立ち上げて
ログインする際にID、PASSを入力待ちで手入力にして最終確認画面でmsgboxだして投稿するような方法の方が簡単そうですね


44 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:03:24 ]
VBAじゃなくてVBScriptでIDとPWが入力された状態で表示させることもできるけどね

45 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:17:07 ]
IDとパスワードはフォームに入力して、それをSendKeysで送ればいいと思う

46 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:43:25 ]
ごめん 42 です。

できるかも!

参考までにソース挙げます。

Yahooページ立ち上げておいて・・・こんな感じで・・・

Dim objIE As Object 'IEオブジェクト参照用
Dim objShell As Object
Dim strURL As String 'URLの文字列

'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
Set objShell = CreateObject("Shell.Application")

For Each objWindow In objShell.Windows
If objWindow.LocationURL = "www.yahoo.co.jp/" Then
objWindow.document.sf1.p.Value = "VBA"
End If
Next

Set objIE = Nothing
Set objWindow = Nothing

47 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:55:25 ]
もうちょっと推敲しろよ

48 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:28:22 ]
質問です。

shell関数でIEを全画面サイズで開く処理を行うと、
会社のPCだと、どうしても全画面で開けません。

最小化でも開けず、ただ適当なサイズで開いてしまうんですが、
何かサイズ指定が不可能になる条件ってPC側にあるんでしょうか?

OSはXP、MSは2002です。

49 名前:デフォルトの名無しさん [2009/05/12(火) 21:57:36 ]
教えてください

Excel2003で、セルを右クリックして出るポップアップメニューに
独自メニューを加えたいのですが、最初のシートには
追加できたのですが(下参照)、2枚目以降のシートのセル+右クリックでは
追加メニューが表示されません

すべてのシートのセルの右クリックポップアップメニューに独自メニューを
追加する方法またはある特定のシートのセルの右クリックポップアップメニューに
追加する方法はありますでしょうか?

よろしくお願いいたします


Public Sub CreatePopUp()
Dim fBar As CommandBar
Dim fBtn As CommandBarButton

Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell")
fBar.Reset '初期化
Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True)
fBtn.BeginGroup = True '新しいグループにする
fBtn.Caption = "変更"
fBtn.OnAction = "Modify"
Set fBtn = Nothing
Set fBar = Nothing
End Sub

50 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:22:39 ]
適当だけど

標準モジュールの一番上に記述
Public Declare Function GetAsyncKeyState Lib "User32.dll" ( _
ByVal vKey As Long _
) As Long
Public Const VK_RBUTTON = &H2 '[RightClick]
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

適応したいシートに記述
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If GetAsyncKeyState(VK_RBUTTON) Then
Dim fBar As CommandBar
Dim fBtn As CommandBarButton

Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell")
fBar.Reset '初期化
Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True)
fBtn.BeginGroup = True '新しいグループにする
fBtn.Caption = "変更"
fBtn.OnAction = "Modify"
Set fBtn = Nothing
Set fBar = Nothing
End If
End Sub



51 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:36:02 ]
>>48
ie側の問題だと思う

iexplore -nohome
だと効くみたいだけど

52 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:50:59 ]
>>51
そうなんですか。。。
ありがとうございます。

53 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 12:54:29 ]
msgboxのYES,NOをすべての最前面に出す方法はないでしょうか?
VbMsgBoxSetForegroundが最前面表示とあるので
MsgBox("確認", vbYesNo, vbMsgBoxSetForeground)
としてみたのですが

VBA実行→IEが立ち上がる→確認がIEの後ろに隠れてしまう
(奥からエクセル、確認msgbox、IEの順になってしまう)
VBA実行→IEが立ち上がる→確認がIEの手前で
奥からエクセル、IE、確認msgboxの順になるようにしたいと思っています

54 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:12:06 ]
+ vbSystemModal

55 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:31:48 ]
>>53
APIでエクセルをアクティブにしてからメッセージボックスを出すとか

56 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:55:24 ]
★5 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

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


57 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:08:53 ]
MsgBoxについての話はスレ違いか?
vbSystemModal使うと「メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。」
だから都合悪いかもしれないと思ってAPI使うってアクティブにする案を出したんだが・・・

APIの使い方がわからないって言ってきたらググレカスとでも言っておくがなw

58 名前:57 mailto:sage [2009/05/13(水) 16:10:07 ]
訂正
× API使うってアクティブにする
○ API使ってアクティブにする

59 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:36:25 ]
要件満たさんだろ

60 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 19:39:10 ]
そもそもアクティブにするのと最前面にするのは違うし。
おかげでボタンが押せなくて操作不能になるアプリがたまにある。



61 名前:デフォルトの名無しさん [2009/05/13(水) 21:37:14 ]
>50
お返事ありがとう
その方法でもメニューが追加されるのは一枚目のシートだけ見たいです
具具っても見当たらないんですよね

62 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:07:23 ]
>>49
いま手元にExcelが無いのであれだが
' Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell")
Set fBar = Application.CommandBars("Cell")
で どうかな?

63 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:13:16 ]
セルに色が設定されていない状態のcolorIndexは何でしょうか?

If Worksheets("Sheet1").Cells(1, 1).Font.ColorIndex <> 2 Then
MsgBox "color"
End If

みたいに書いているんですが、bookを作った最初の状態は、白ではなく、色が未設定の状態だと思うんですが。。。


64 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:16:58 ]
xlColorIndexNone ですかね。

65 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:19:21 ]
Interior.Colorindex= 0

fontではなくInteriorです!

66 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:23:50 ]
ありがとうございます!

0でもxlColorIndexNoneでも同じって事ですか?

fontとInteriorはコピーする箇所を間違えました;

67 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:49:08 ]
例えば、
Range("A1").Activate
Activecell.Interior.Colorindex=0
Msgbox Activecell.Interior.Colorindex
Activecell.Interior.Colorindex=xlNone
Msgbox Activecell.Interior.Colorindex
Activecell.Interior.Colorindex=xlColorIndexNone
Msgbox Activecell.Interior.Colorindex
Activecell.Interior.Colorindex=xlColorIndexAutomatic
Msgbox Activecell.Interior.Colorindex
とかすると面白い?

68 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:13:52 ]
xlNoneは-4142だから0とは違う

69 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 12:35:39 ]
-4142
-4142
-4142
-4105

になったぞ by Excel97

70 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 19:53:45 ]
スイマセン、ローカルにコピーしたロータスノーツのファイルにアクセスする方法について教えていただきたいのですが・・・
あと、VBAの設定で参照可能なライブラリファイルにチェックを入れとけばいいんですよね?



71 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 19:47:16 ]
オブジェクト型変数には、オブジェクト自身ではなく、オブジェクトの情報を呼び出す為の番号(参照)が入る。

って、要するにポインタのことですか?

72 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:27:27 ]
参照です。

73 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:34:09 ]
大まかには合ってるんじゃない?
とりあえず、他の変数に代入してもオブジェクトそのものは
複製されない事だけ把握しとけばOK。

74 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:46:14 ]
実態をコピーせずに何らかの番号で区別するって意味では合ってるかもしれないけど
やっぱり参照とポインタは微妙に違う
狭い意味だとポインタはアドレスのことだったりもするし
あとは実装次第だ

75 名前:71 mailto:sage [2009/05/16(土) 21:09:11 ]
>>72-74
ありがとうございます。

76 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 13:44:16 ]
自分が使っているテキストでは、下のプログラムを実行すると、
シートの行と列全てがアトランダムに塗りつぶされるはずなのですが、
実際にやってみても、全列の1行目しか塗りつぶされません。
どこかおかしいのか、教えていただけませんか?

Option Explicit

Sub 画面更新()
Dim i As Integer
Application.ScreenUpdating = False

Rows.ColumnWidth = 1.75
For i = 1 To 6000
Cells(i).Interior.ColorIndex = Int(Rnd * 56) + 1
Next i

MsgBox "これから更新します。"

Application.ScreenUpdating = True

MsgBox "更新終わりました。"

End Sub

77 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:13:56 ]
>>76
Office2007で利用可能な桁数が大幅に増えた(16384?)のが理由。
桁数が最大256桁とか決めうちしていると、こういうことになる。

78 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:14:38 ]
Cells(i).

が原因だね。
cells(row,column) 
で指定しないと。

79 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 19:32:56 ]
>>77-78
どうもありがとう

80 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 07:30:50 ]
質問です
VBAで他のアプリケーションを開くまでは色々ググって出来たんですが
そのアプリが閉じられたら、再びVBAに処理を戻したいんです。
今はファイル名のリストがフォーム上に有ってその名前で検索したファイルを開くという作業で一太郎やワード等を
ShellExecuteで開くというの作ったんですが
開いたファイルが閉じられたら更新日時を調べて変化が有れば書類の板番号を更新したいんですが
いつ閉じられたかも解らないし、ファイルを開いて処理が中断し閉じて再開すると言った事は不可能でしょうか?



81 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 09:09:25 ]
>>80
それはアプリの終了よりもファイルの更新を調べた方がいいのでは。
VBAで1秒間隔のタイマーをセットして、ファィルのタイムスタンプを1秒おきに調べるみたいな方法なら
すぐに思い付くけど。

82 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 12:00:46 ]
>>81
わかりました
それで行きます


83 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:17:19 ]
えっ、それでいっちゃうの?

84 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:20:12 ]
行くって言ってるだろ

85 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 14:53:02 ]
だって
思い付かないんだもん

86 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:03:24 ]
OpenProcess()してWaitForSingleObject()するのは駄目なのか?

87 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:06:00 ]
dirname/filea.ext
dirname/fileb.ext
があったときに、".ext"に関連づけられているsomeapp.exeを起動したとき、
fileb.extもsomeapp.exeで更新している可能性があるので、
プロセスの終了を待ち合わせて、dirname/*を全検索して情報を更新するのが一番。

88 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:00:13 ]
ファイルを閉じて、アプリは閉じないかもしれない

89 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:19:47 ]
ROTにファイルがあるかチェックすればよい

90 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:17:48 ]
line input 命令で chr(&h0) の入ったレコードを読み込むと強制的に chr(&h20)に置き換えられるのでしょうか?
もしそうでしたら、何らかの回避方法を教えていただきたいのですが・・・



91 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 20:21:34 ]
バイナリで読め

92 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 11:12:20 ]
>>86
試して見ましたが
ファイルが開き終わるとwaitが終了し次の処理に移ってしまうようで上手くいきませんで
filepath="sample.txt"
CreateObject("WScript.Shell").Run FilePath, vbNormalFocus, True
MsgBox FilePath & "が閉じられました。", vbInformation Or vbSystemModal
これで済ませました お騒がせしました 

93 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 12:11:15 ]
ワークシートのmodと異なり、VBAのmodは小数点下が切り捨てられてしまいます。

小数点下を含む剰余を返すようにしたいのですが、ワークシートのmodは演算子だから
application.mod()とは出来ない。

良い方法はありますでしょうか?

94 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 14:33:35 ]
小数点下は元の数と同じな気がする

95 名前:93 mailto:sage [2009/05/19(火) 15:32:48 ]
>>94
分母が整数なら・・・。

x mod yの場合、x - Int(x / y) * yで良いのかなぁ。

96 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:18:52 ]
x - (x \ y) * y

だとどうだろう

97 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:45:17 ]
顔文字かと思った

98 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:52:54 ]
>>96
たばこを吸うバルタン星人ですよね???

99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:37:42 ]
すいません、WindowsXP SP3、Excel2003での質問なんですが、
VBAを使って罫線ツールバーの「罫線を作成」機能(セルの枠線にそってクリック・ドラッグで罫線を引く)
と同じことをするのは可能でしょうか?

100 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:04:50 ]
>>99
罫線を引きたいセルを選んでVBA実行して罫線が引かれるっていうのならできるんじゃね



101 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:29:32 ]
test

102 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 21:13:05 ]
以下のようなことをやりたいです。
XP、Excel2003です。

Excelファイルが2つある。1つは用語集ファイルと呼び、もう1つは作業ファイルと呼ぶ。
用語集ファイルには英単語とその対訳がリスト形式で保存されている。
作業ファイルには英文が書かれていて、知らない英単語が出てきたら用語集ファイルを検索して
その意味を調べる。
具体的には
1.作業ファイル中の検索したい単語を反転表示させる。
2.右クリックのショートカットメニューから、独自に追加した「単語を検索」をクリックする。
3.用語集ファイルに、1で選択した単語の検索結果が表示される。(Ctrl+Fでの検索と同じ表示結果)

※ただし、作業ファイルにはマクロは記述しない。

作業ファイルにはマクロは記述しないので2が無理かと思うのですが、代替案として
どのような方法を取ればいいでしょうか?(右クリックのショートカットメニューでなくてもいいので
とにかく作業ファイルにはマクロは記述せずに、3と同じ結果を得たいのです)
おおまかな手順でいいので、ヒントをお願いします。

103 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 21:26:28 ]
personal.xlsに記述するのもだめ?

104 名前:102 mailto:sage [2009/05/20(水) 21:49:38 ]
>>103
OKです。
personal.xlsが何なのか知らなかったので調べたのですが、どうやら自分の作ったマクロを
まとめておくエクセルファイルのようですね(初心者ですみません)。
つまり、最終的には作業ファイル・用語集ファイル・personal.xlsという3つのファイルで作業する
という認識で正しいですよね?

105 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:00:12 ]
>>102
その程度のユーザビリティなら、そのままCtrl+Fで良いじゃん。
わざわざマクロを組む必要性がわからん。


106 名前:105 mailto:sage [2009/05/20(水) 22:01:04 ]
>>105
あぁ、別ファイルか。
ごめん。

107 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 07:37:30 ]
>>95
別に分母が正数じゃなくてもそれでいいんじゃない?
むしろ分母が整数の必要があるのは>>96だな。

108 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:20:20 ]
重複に関してちょっと質問します。

= IF(COUNTIF(B:B,B4) >1, "重複","")

この関数でE4という条件をB列全てに適応できたらと
思っています。この関数ではB4のセルの内容が
他と重複してるかいないかのチェックだけになります。

B4セル エクセル
B5セル ワード

このような場合エクセルとワードという単語がB列で
重複してるかいないかのチェックになります。

109 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 09:31:14 ]
これはVBAではないですよね?


110 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:00:14 ]
エクセルだなw



111 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:18:50 ]
あるセルにこんなSUMIF関数を入れたいんだけど、
Cells(r + 1, 4).FormulaArray = "=SumIf($O1:$O500,cells(r,3),#K1:$K500)"
エラーになってしまうのは、検索条件がおかしい?
(rはFOR〜Nextさせています)

112 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:32:10 ]
Cells関数なんてあったか?

113 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:43:27 ]
>>111
何で文字列に変数名が入ってるんだ。
” ”で囲まれた中は文字列だから、rは文字のrでしか無い。

てか、SUMIFなんて使わずにVBAで構文書いた方がずっと楽だよ。

114 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:28:23 ]
こうか?
Cells(r + 1, 4).FormulaArray = "=SUMIF($O1:$O500," & Cells(r, 3) & ",#K1:$K500)"

115 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 01:11:16 ]
>>111
そんなのはピボットでやれよ。
#は$の間違いか?

116 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 08:13:03 ]
>>113
for文使ってるって言ってるんだからVBA使ってるいるんじゃないのか?

117 名前:デフォルトの名無しさん [2009/05/22(金) 11:29:40 ]
>>4 replace

☆VBAはVisual BASIC For Applicationsの略だとされており、Visual BASIC
Visual BASIC .NET VBScrptとは文法が異なる言語です。(ただし共通性は
概して高いです。)
☆制限はそれなりにありますが多くのVBA環境からもWindowsの共通ライブラリ
を利用することが出来ます。(但しそれぞれのライブラリの個性に応
じた、専門知識は必須ですがそれが公開されている(=入手可能)とは限りま
せん)
☆このスレではVBAを用いてExcelがインストールされている
Windowsマシンでは、原則としてはプログラム言語の種類によらずに
使用可能なライブラリ「Excel オブジェクト」の公開部分の操作をし
て目的の結果を得る(※)手段を考案する状況で発生した疑問、質問に対して
有志が答えるスレッドだと考えられます。Excelに付属のVBAエディター
を使用してプログラミングを行っているという状況はまさにこの
状況になりますし、その状況以外で発生したものはスレ違いになる可能性
が濃厚です。
(※)この手段が邪道でExcel道に根本的に反するという意見も貴重
です。Excelは一元的かつ算術的な処理の為のソフトウェアであり、多元的
かつ手続き的な処理には向かないという考えに基づくものです。
本来VBAがもっとも効率的に活躍するのはAccess環境であるという考え方
を取りたいものです。

118 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:51:39 ]
>>111
そもそもFormulArrayなら範囲に1個の配列数式だからループを回すのはおかしい。
式の入力範囲がD2:D100だったらD2:D100を選択して{=SUMIF(O1:O500,C2:C100,K1:K500)]だが
Range("D2:D100").FormulaArray = "SUMIF(O1:O500,C2:C100,K1:K500)"
と書けば配列数式が入力される。
配列数式じゃなければFormulaArrayじゃなくてFormulaだ。
どっちにしてもループは回す必要なし。
>>115が言うようにおそらくピボットテーブルでできることだろうけどな。


119 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:52:34 ]
Range("D2:D100").FormulaArray = "=SUMIF(O1:O500,C2:C100,K1:K500)"
だった。


120 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 12:15:10 ]
>>117
回答者側はその物言いで理解できるだろうけど
質問者側はそれじゃ理解できない奴多いだろうな



121 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:32:03 ]
世の中は即理解できる世界ばかりで出来ているわけじゃないことを
教えるのは重要

122 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:40:44 ]
プログラムって、頭の良い人なら3日くらいで何でもできるようになるのだろうか?
自分は4月から勉強し始めたけど、やってもやっても、
分からないことや、知らなかったことが出てきてゴールが見えてこない。

123 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:48:57 ]
頭の良い人なら3日くらいで何でもできるようになるのだろうか?


3日くらいで何でもできるようになるのが頭の良い人

124 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:18:55 ]
試験勉強じゃないから暗記しなくてもいいし
わからなかったら人に聞いてもいいし
本人に作る気があればプログラムなんかいくらでも作れるだろ

125 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:31:46 ]
俺は長い事ECMAやってからVBAを始めたんだけど、

・言語体系を覚えるまで3か月
・VBAで出来る事、向いてる事かが分かるまで更に3か月
・調べながら自分で作れるようになるまで更に3か月

って感じで、かなり時間が掛かった記憶がある。
VBから始める人ならそれこそ3日で出来るとかあるだろうけど、
それ以外の言語からだときちいわ。
未だに分からん事の方が多い。

プログラムやったこと無い人だったら、変数って何?配列って何?
って事から始まるんだし、もっと時間かかるんでないか?

126 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:34:59 ]
ECMAって何だ?

127 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:36:41 ]
まず、何でも出来るようにはならない。

出来るよ!って人でもその時々で調べながらプログラム組んでるものです。

暗記する必要もないし、調べながらでも出来れば問題ない。

大体、使うものって限られてるし、それが出来れば十分なわけです。

128 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 15:05:05 ]
>>125
ECMAってJavaScriptだろ?
そりゃきちいわ。同じ系統でもVBScriptからだと
だいぶ違うと思うがどうかな。
だがVBA自体はかなりしっかりした
言語なんで半年以上かけて勉強したことに
ついて損はしてないね。

129 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:25:31 ]
OS:WindowsXP
Excel2007

での質問です。
今までExcel2003で使っていたマクロの冒頭部分が以下のとおりです。

If Dir(OutPath & "\完成", vbDirectory) = "" Then MkDir OutPath & "\完成"
ActiveWorkbook.SaveCopyAs FileName:=OutPath & "\Tmp.xls"
Workbooks.Open FileName:=OutPath & "\Tmp.xls"

Dim TmpWorkBook As String
TmpWorkBook = "Tmp.xls"
Workbooks(TmpWorkBook).Activate

ここで作った一時ワークブックに、別に開いたCSVファイルをシートごとコピーするという命令が続くんですが、
Excel2007になってからCSVを開いた時勝手に巨大なシートサイズになる?のかどうかわかりませんが、
コピーの時点で「コピー先に対してシートサイズが大きすぎてコピーできません」となるようになってしまいました。

そこで上記マクロの"Tmp.xls"をすべて"Tmp.xlsx"にしてみたのですが、
今度はファイル拡張子とファイル内容が一致しませんと言われてOpenできませんでした。

原因と対処がわからないのですが、どのように改善したら良いでしょうか?

130 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:37:42 ]
追記:マクロ実行時点でのActiveWorkbookは本マクロが含まれてるファイルです。



131 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:15:34 ]
すみません、自己解決しました。

大元のファイルをxlsmで保存しなおして、VBAの中もxlsmにすればいいんですね。


132 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:17:20 ]
>>122
目的があれば、すぐに覚えられる
事務作業の自動化のために
表への入力、印刷設定→印刷の自動化、ファイルを正規化させたり、シートを一度に何個も作る・・
等の作業をマクロの記録。そして改変。後はifやforを覚えたかな
プログラムへのとっかかりとして、マクロの記録はとんでもなく優秀だと思うわ
プロシージャやメソッド、その概念すら覚えて無くてもとりあえず動くマクロが作れるってところがね


133 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:48:19 ]
>>127
確かに暗記しなくても書けるには書けるが、せめて
宣言系、制御系、演算子くらいは最低限暗記しないと、とても実用にはならないよ

まあこのへんはまともなコード書けば必ず使う物だから、意識して覚えようとしなくても
すぐに暗記しちゃうとは思うが

134 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 20:11:36 ]
>>122
やりたいことが明確になればすぐにできるようになると思うよ
わからないことが出たら調べてそれでもわからなければここで聞けばみんなが教えてくれるし

参考書読んでてもあまりできるようにはならないかな
まず簡単な
A1の値をA3にコピーするから
A1の値をSHEET1のA3にコピーしてみる
さらにA1の値を別BOOKのSHEET1のA3にコピーしてみる
と言ったように自分でいろいろ弄って遊ぶような感覚でやっていかないと
覚えが悪いと思う

135 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 21:22:23 ]
VBAを使ってツールバー上のコントロールを実行したいんですが、
ドロップダウンリストなどを項目を選択して実行するということは可能でしょうか?
例えば書式設定ツールバーのフォントを選択するリストでMS明朝を選んで実行、というようなことです。

普通のボタンをExecuteで実行するやり方は分かったんですが、リストの場合はどうすれば…

136 名前:デフォルト名無しさん mailto:sage [2009/05/22(金) 22:46:56 ]
学校の課題なんだけど、
ttp://www.hasimoto999.aki.gs/img-box/img/5764.jpg
ttp://www.hasimoto999.aki.gs/img-box/img/5765.jpg

が、5時間近く考えてもわからない
簡単過ぎる問題かもしれないけど、ご教授頼むorz
ちなみに19の1は解けてる。



137 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:50:05 ]
> ★3 丸投げのプログラム作成依頼は受け付けていません

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

138 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:55:09 ]
>>136
そんなピラミッドを描いて何になる?
って解答欄に書いて、相手にたたきつけろ!

139 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:58:13 ]
For〜Next、二重ループ とまで書いてくれてるのに分からないとか

140 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:10:41 ]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1411688549
やるだけ時間の無駄な問題だな



141 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:24:46 ]
デバッグのことに関して質問したいです。
代入していない、宣言していない変数へアクセスしたときにエラーを出すにはどうすればいいですか?

Option Explicitを指定すると 代入は検知できるんですが
宣言してない変数を読み出しても、Empty値が返ってくるだけで
そのまま実行されてしまいます。






142 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:29:09 ]
それともう一つ、
また、エラーが発生した箇所を調べることは出来ないのでしょうか?
たとえば、オブジェクトをSetを使用しないで代入すると
「実行時エラー'91' オブジェクト変数またはWith(ry」と例外が発生して、ダイアログが出ますが
この例外が発生した箇所を調べることは出来ないのでしょうか?

現在は地道にステップインでエラーが発生するまで追っていますが
なんだかばからしくてやってられません。

また、例外構文もN88BASICを思い出させる、On Error〜割り込みしか無いのでしょうか?
よくある、try〜finally 〜catch(Exception e) というような構文はないんですか?

143 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:30:44 ]
>>142
>なんだかばからしくてやってられません

それが自分の資質を示しているねw

144 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:34:47 ]
>>136
辛口な事言うけど、論理的思考が全く出来てないでしょ。
ただ答えだけ貰ったって何も役に立たんのでは?
単位もらえりゃ良いって事なのかもしれんけどさ。

for i = 1 to 9


145 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:36:34 ]
>>136
途中送信しちまった。

for i = 1 to 9
for j = 1 to 9
cells(i,j).value = i*j
next
next

つーか、こんな問題も解けない生徒がいるのに良く授業だなんて言えるわな。

146 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:38:30 ]
>>142
エラー吐いた部分で黄色く反転して中断されないか?


147 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:43:47 ]
これでも別に不正解ではないな。プログラムサイズに制限もないみたいだし。
二重ループは最後に空ループでも置いとけばいい。

Range("A2")=1
Range("A3")=2
Range("A4")=3
Range("A5")=4
  :
以下略

ちなみに、文句言ってるやつは全科目100点だったのかな?
宿題を誰かに写させて貰ったこともないのかな?
学校なんてこんなもんだよ。まじめに考えすぎ。

148 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:45:22 ]
>>145
そうやって結局教えちゃうから育たないんでしょ

149 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:46:10 ]
たかが5時間でギブするのはどうだよ

150 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:46:29 ]
>>147
論点のすり替え
ここは宿題教えるスレじゃない



151 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:46:55 ]
単位なんてもらったもん勝ち。入試だって就職だって、まぐれでも入ったもん勝ち。
世の中、要領と運のいいやつが一番トクをする。

152 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:47:59 ]
九九はどうでも良いんだけど、ピラミッドの方がなぁ。
指定された整数が129以上だと、その時点でオーバーフローだな。2003までは。

do untilで指定の数までインクリメントして、
do untilで1になるまでデクリメントして、
積み重ねる部分を関数化するのが楽だと思ってしまた。

153 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:48:42 ]
>>149
それ以前に、こんな問題、読んで1分で分からなきゃモノにはならないよ。

154 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:51:57 ]
こんなレベルの低い、下らないもんで良いのか。
やっぱ学校なんて気楽なもんだね。

この程度の問題が100点でした!VBA出来ます!!
って入ってくる新人がいるって事の方が怖い。

155 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:12:01 ]
うちの学校は一般教養にコンピューターの授業が週一であって、
簡単なプログラミングの問題が出た。
少なくとも生徒の99.9%はプログラマーなんて目指してなかったし
宿題なんてほぼ全員が誰かのノートを丸写ししてた。

156 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:13:09 ]
ふーん

157 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:22:59 ]
うちの商学部でもCとかJavaとかの授業があった。教え合ったりこそはしたけど、コードとチャートは各自で書いてたよ。
SEにはならなかったけど、今の職場でVBAが扱えることで重宝してもらえてる。てかSEにならんでよかった、なったら埋没してたろうから。

158 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:27:04 ]
>>157
自分より優秀な奴が集まる集団で働くよりも、自分が一番の集団で働く方が、
大事に扱われるし、自尊心も満たされるしなw
給料3万円しか違わないなら、俺は後者を選ぶ。

159 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:33:36 ]
うちのひいじいちゃんが言ってた
「鶏口となるも牛後となる勿れ」ってね

160 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:35:14 ]
俺は三番手位でいいや。
出る杭は打たれる、という諺もあるしな。



161 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:40:20 ]
俺はわかっててもできないフリをしてる。
なんか面倒な作業を押しつけられそうだし。
今の年収で満足してるし、課長とか部長にもなりたくないし。
最低限の生活が出来ればいいや。

162 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:45:58 ]
現実で使えない問題なんてさっさとネットで聞くのが吉
現実的にありそうな問題は分かるまで自分で考えるのが理想だが、そんなことで単位落としたりしてはそれはそれで問題だろう
実際現場ではネット使い放題、上司に質問し放題なんだし
かと言ってそれに頼りすぎて成長しないのも困るんだけどね
でもそれが仕事がすすまないのも困るんだけどね


163 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 03:26:21 ]
>>143
構文チェック時・コンパイル時に分かることなのに
実行しないと分からない。しかも100行を超えるコードをウォッチ式で変数を監視しつつ、ステップ実行するというのは
明らかに効率が悪く、方法を見直す必要があるため、質問しました。

>>146
されません。 例外が発生すると、OKとHELPしか選択肢のないダイアログが出るだけです。
もちろん、ブレークポイントを設定したり、ステップ実行したり、Escキーで停止したときには
実行中の行が黄色く表示されますが。

書き忘れていましたが、
Office 2007 EEで保存形式は2007+マクロ(xlsm)です。

164 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 04:16:07 ]
>>163
うそつき
ttp://windyakin.if.land.to/src/up38_1232.png

165 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 13:42:35 ]
>>164
私の環境では
windyakin.if.land.to/src/up38_1233.png
こうなりますよ。

やはり何かデバッグオプションが足りないのかもしれません。
プロジェクトのプロパティに「条件付きコンパイル引数」という項目があるんですが
そこの所が空欄なのが問題なのかもしれません

が、オフラインヘルプを見ても
windyakin.if.land.to/src/up38_1234.png というようになんか壊れてますし・・・
オンラインヘルプじゃないのでそのまま凸することも出来ません

MSDNの.netリファレンスが不親切だと思ったことはないですが
このVBEに付属するリファレンスは何かと不親切ですね。列挙子が何を意味するのかも省略されてますし、ひどいものです。
翻訳作業が間に合っていないならせめて原文を載せてほしいところです。

166 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 13:52:14 ]
2007で確認したけど、164と同じ。
もしなんだったら、MSDNの原文読めばいいんじゃない?

167 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:21:26 ]
>>165
条件付きコンパイル引数のとこはうちでも空欄
ヘルプも同じ所が同じようにおかしい

168 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:25:33 ]
画像貼るの忘れた
ttp://windyakin.if.land.to/src/up38_1235.png

169 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:35:28 ]
セル内の文字列を選択した状態(反転表示した状態)のまま、マクロを実行することはできないのでしょうか?
ツール→マクロをみてもグレーアウトされた状態で実行できません。

170 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:22:20 ]
>>136
今更だが今初めて質問みたのでピラミッドのヒントだけ
1,3,5,7,9と増えていくから必要な”■"は段数*2-1必要。
ループは後ろから回せばよい。
あとはCellsとかResizeとか好みでOffsetとか。



171 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:26:01 ]
ループは頭からでも同じか。

172 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 19:06:30 ]
一寸だけキモく書くならこんな感じか?
For i=1 To height
For j=1 To height*2-1
Cells(i,j)=IIf(i>Abs(height-j),"■","")
Next
Next

173 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:33:33 ]
>>172
ふつうに数学的に考えるなら
y = n - | x - n/2  |  で良いよね nは底辺の長さ n = h * 2
グラフに疎い人だと、ピラミットは垂直二等辺三角形が2つくっついたものだととらえて
   x1(i) = h - i   x2(i) = h + i    y2(i) = y1(i) = h - i (0 <= i <= h)
とするかもしれない。
ピラミットに必要な石の数は孔子にでも聞け。区間[0,n-1]までで上記の式を積分すれば分かる。

174 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:38:21 ]
垂直二等辺三角形

175 名前:173 mailto:sage [2009/05/23(土) 21:05:14 ]
>>174
どんな三角形だw と思ったら自分で書いてたorz
正しくは"直角"二等辺三角形です

176 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:26:27 ]
For i = 1 To 9
  For j = i To 9
    Union(Cells(i, j), Cells(j, i)) = i * j
  Next
Next



If height * 2 - 1 > Columns.Count Then
  MsgBox "列数が足りません"
Else
  For i = 1 To height
    Cells(i, height - i + 1).Resize(, i * 2 - 1).Value = "■"
  Next
End If


177 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:03:49 ]
>>176
union使いたかっただけじゃないのかと。

178 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:18:30 ]
Range("A1:I9").Formula = "=ROW()*COLUMN()"

179 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:46:10 ]
Height = 5
[A1].Resize(Height, 2 * Height + 1).Formula = "=IF((ROW()+COLUMN()>" & Height & ")*(COLUMN()-ROW()<" & Height & "),""■"","""")"

180 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:56:07 ]
Range("A1:J10").Formula = "=IF(ROW()*COLUMN()<>1,(ROW()-(ROW()>1))*(COLUMN()-(COLUMN()>1)),"""")"



181 名前:デフォルトの名無しさん [2009/05/24(日) 08:15:08 ]
>>135
ちれすだが、win32 apiを使用すれば可能。
enumwindows等でハンドル取得、sendmessageでコマンド送信する。
概してvbaでやるもんではない。
それよりも自前機能内なら、font選んで使った方が早くないか?
知らんけど。

182 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:09:19 ]
ちょいと見逃してて今読み返してみたが、Win32API使う必要なんて全く無いじゃん

Application.CommandBars("Formatting").Controls("フォント(&F):").Text = "MS 明朝"

Textプロパティに値を代入した時点で、Executeしたのと同じで選択セルのフォントが変更される


継承って概念を理解してないとわかりにくいかもしれないけど、定義上Controlsコレクションが返すのは
CommandBarControlだが、実際にControls("フォント(&F):")が返すのはCommandBarControlを継承した
CommandBarComboBoxなので、CommandBarControlには無いTextやListIndexなどのプロパティが指定できる


上記の書き方では.Textプロパティはコードの自動補完リストには出てこないが

Dim objCommandBarComboBox As CommandBarComboBox
Set objCommandBarComboBox = Application.CommandBars("Formatting").Controls("フォント(&F):")
objCommandBarComboBox.Text = "MS 明朝"

とすればちゃんと補完リストにも出てくる

183 名前:135 mailto:sage [2009/05/24(日) 15:54:03 ]
>>181
ありがとうございます。実際には罫線ツールバー上にある「罫線の作成」「罫線グリッドを作成」の
線スタイルと線の色を選択したかったんです。
とりあえず罫線の作成を使うのはあきらめて、Bordersで選択セルに線引くマクロ作って代用しました。

184 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:57:57 ]
質問です。

ユーザーフォーム上のコンボボックスでリストの中から
選択すると、その文字が全選択された状態になります。

これを解除してカーソルの状態にするにはどう記述す
ればいいのでしょう?

185 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 05:25:55 ]
ComboBox1.SelStart = Len(ComboBox1.Text)

186 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 08:31:22 ]
>>185
ありがとうございました。

187 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:33:19 ]

自分では、セルA1の値が75以上で合格、90以上で優秀、
それ以外は不合格になるプログラムを書いたつもりなのですが、
セルA1に100を入れても、合格になってしまいます。
どこがダメですか?


Sub 条件判断()
Dim i As Integer
i = Range("a1")
If i >= 75 Then
Range("b1").Value = "合格"

ElseIf i >= 90 Then
Range("b1").Value = "優秀"

Else
Range("b1").Value = "不合格"
End If

End Sub

188 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:07:03 ]
>>187
Sub 条件判断()
Dim i As Integer
i = Range("a1")
If 90 > i And i >= 75 Then
Range("b1").Value = "合格"
ElseIf i >= 90 Then
Range("b1").Value = "優秀"
Else
Range("b1").Value = "不合格"
End If
End Sub

189 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:28:32 ]
>>188
ありがとうございます。

>>186 の式だと、ElseIf の文が評価されずに終わるから、ダメ。

という理由で合ってますか?

190 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:30:32 ]
>>189
訂正です

186 ではなくて、 >>187でした。
すみません。



191 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:40:50 ]
>>189
If i >= 75 Thenの時点で100の判定はされているので
ElseIf i >= 90 Thenの部分は評価されません。

こう書いた方が分かりやすかったかも
Sub 条件判断()
Dim i As Integer
i = Range("a1")
If i >= 90 Then
Range("b1").Value = "優秀"
ElseIf i >= 75 Then
Range("b1").Value = "合格"
Else
Range("b1").Value = "不合格"
End If
End Sub

192 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:06:07 ]
こういうパターンは、Select Caseで書く方が判り易いかな。
そして判り難い書き方の例。
Range("b1").Value = Choose(1-(i>=90)-(i>=75),"不合格","合格","優秀")

193 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:17:26 ]
「分かりやすい」感覚の押しつけには反対です。

194 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:21:17 ]
分かりやすいって書く前にコードを書いてみたらいいじゃない
その方がどちらが分かりやすいか「分かりやすい」だろう

195 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:23:17 ]
おれならElseIfは使わないかな

If i >= 90 Then
  優秀
Else
  If i >= 75 Then
    合格
  Else
    不合格
  End If
End If

196 名前:デフォルトの名無しさん [2009/05/26(火) 22:24:00 ]
VBAで
たとえばExcelで
Z11に文字が値が入力されていたらA1〜Z11を全選択
A40000に文字が値が入力されていたらA1〜A40000を全選択する文を記述したいのですが
これってどうすればいいのでしょうか?

197 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:34:12 ]
>>196
うーん・・マクロの記録で
ctrl+end
と同じってこと?

198 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:44:38 ]
UsedRange.Selectで解決しそうな予感

199 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:44:39 ]
ファイルの検索やフォルダの検索ってできますか?

あるルートフォルダから、以下何階層に渡ってフォルダが作られているかは不明で、
指定した文字を含むファイルをルート以下から探して、返したいんだが。。。
全てを探して、名前を含むリストを作りたいんだよね。

200 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:49:33 ]
とりあえず、FileSearchオブジェクトは使用禁止と言っておく。
Office2007で廃止する気満々だったので。



201 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:55:02 ]
とうとう俺がVBAに本気出すことにした。
今はまだひよっこだが、いずれ大鷲となって羽ばたいた時
おまえら大鷲先生と呼べよ。

202 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:00:54 ]
飛んでから言えよw

203 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:01:46 ]
何か知らんががんばれよ
俺は配列で飽きてC言語やってるわ

204 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:03:22 ]
>>199
そのマクロどっかで配布されてた。


205 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:11:21 ]
Excel VBA FileSearchでぐぐると
Dir関数とかの話がでてくるよ

206 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:47:16 ]
FileSearchってのは使わない方がいいのは何故なんでしょう?

207 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:06:07 ]
ttp://www.google.co.jp/search?q=excel+2007+filesearch


208 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:12:10 ]
質問です。

Functionプロシージャに渡したい引数が多い場合、構造体を作って
Public Type UserType
  a As integer
  b As Long
  c(10) As String
End Type

Sub AAA()
  Dim data As UserType
  Call BBB(data)
End Sub

Function aaa(ByRef data As UserType)
 '処理
End Function

のように構造体ごと渡してやればスッキリしますよね。
この時dataの中身を値渡しのように使いたいとしても、参照渡しとなるので
Functionプロシ−ジャの中でdataの中身が書き換えられる恐れはありますよね?
構造体を渡すけれども、値渡しとして使うという明示的な方法はあるのでしょうか?

宜しくお願いします。

209 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 07:41:08 ]
>>208
基本的には無い。やるとしたら以下の3つかな?
@コーディングルール徹底(コメントを残して従う、関数名 etc)
A予め構造体をコピーしておく
B構造体ではなく、必要データだけ渡す

もしかして、byval渡しなら出来たりして。
けど、VBAに限らず上の3つは基本だと思う。

210 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 20:37:10 ]
W2K XL2000 配列から重複データを排除しユニークなデータの集合にする方法を教えてちょんまげ



211 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 20:52:04 ]
>>210
スレ違い>>4★5★6

212 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:04:46 ]
>>210
dictionary使う。

213 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:09:44 ]
ユニークといえばモニーク

214 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 03:34:49 ]
>>210
ワークシートに並べてフィルタかける

215 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 09:01:13 ]
>>214
オートフィルタとかワークシート関数とかを如何に活用するかが
ExcelVBAの醍醐味

216 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 18:33:58 ]
>>215
そうだね。
となりに=COUNTIF($A$1:A1,A1)が1になってるとことか、=MATCH(A1,A:A,0)=ROW()がTRUEになってるとこをオートフィルターにかけりゃいいもんな。

217 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:25:09 ]
配列まで使えるってことはVBAをそれなりに使えると考えられるわけで
既に存在する配列からの削除って事は
フィルタかけるくらいなら取り込み時点で排除する方法を採っているだろうと予想できるわけで
CreateObject(Scripting.Dictionary)はこれ自体の機能はスマートだけど
結局配列に戻さないといけないから実用レベルで組み込むとコードが鬱陶しいんだよね。
なんか実務家ならではの回答ってないの?おまえら

218 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:32:50 ]
dictionaryに放り込んでから配列に戻すのが面倒だと感じるならば、
重複判定を積んだ配列に放り込めば良いじゃない。

配列を複数持つ事を嫌うならば、クイックソートで配列を並び替えて、
重複した場合に削除すりゃ良い。
これはワークシートでやってる事と一緒だけどね。

個人的には、作業用配列を作る事に違和感を感じないんで、
別配列に重複判定しながら放り込むけどな。

219 名前:217(210) [2009/05/28(木) 19:48:25 ]
いいですね。教えてちょんまげ。
まず「配列に重複判定を積む」ってどうやるんですか?
それから、配列から配列を作ろうとする場合、まず二重ループでの処理を思いつくけど
配列を二重ループ内に組み込むとエラーが出ちゃいますよね。
これ、どうやって回避、あるいはどんな他の方法を採ってますか?

220 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:02:41 ]
1次元配列で良ければDictionaryのKeysメソッドで何も面倒なことないんでない?
別の2次元配列なら重複判定しながら放り込んだ方がいいけどな。



221 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:25:20 ]
Scripting.Dictionaryがハッシュ使ってて性能いいんじゃね?

222 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:53:30 ]
>>221
データによるね。
あまりにも多いとCollectionに負けるし、クイックソートして詰める手法にも負ける。

223 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:09:02 ]
Dictionaryで重複を弾くのは裏道を抜ける感じがするんで、
論理的思考を養う段階のレベルならば、Dictionaryを避けて配列使った方が良いかもなぁ。

でも、pushがデフォルトで搭載されてない言語だから、ステップ数増えるよね。
Dictionaryでもいいかな・・・とも思う。難しいのぉ。

これを機会にクイックソート覚えるのもいいかもね。

224 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:19:37 ]
CreateObject("System.Collections.SortedList")は?

225 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:22:06 ]
文字列データはいいとして、ある決まった範囲の整数にまでDictionaryを使うやつはアホだね。
猫も杓子もCreateObject(Scripting.Dictionaryを見るとうんざり。

226 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:26:35 ]
> なんか実務家ならではの回答ってないの?おまえら
スレ違いだからコードそのものは伏せるけど、重複削除の汎用関数作って、
それに放り込むだけだろ

ワークシートの機能とかScripting.Dictionaryとか使えない言語でも
この手の処理は必要になるから、ちゃんといくつかのアルゴリズムが確立されている

ソートみたいに、計算量、必要バッファ量、順序の維持(ソートで言うところの安定ソート)など
それぞれ特徴があるから、必要なアルゴリズムを必要な言語に書き換えて用意して
おけば良いだけの話

227 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:31:06 ]
>>226
それがどれなのか分からないから教えてくださいって話じゃね
教えてくださいよ先輩

228 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:32:39 ]
しかしExcel2007の新機能の重複の削除はひどいな。
どっかで見て俺も試したら笑ってしまった。
重複してないものまで削除することあるんだもんな。

229 名前:217(210) [2009/05/28(木) 21:33:53 ]
いろいろありがとう。
>重複削除の汎用関数作って
理想としてはこれでやりたいんだけど、
Functionとの間での配列の引渡し方・受け入れ方が分からないんですよ…

230 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 22:11:21 ]
>>229
もう総当たりでやれよ。関数化は後の話だ。
関数化するにも、自前でルーチン作成出来なきゃダメなんだしさ。

forで 配列1 から 配列2 に全要素をコピーするだけだ。
その時に、配列2に対象の要素が含まれていない時って条件付けるだけ。
総当たりでやるのが論理的には一番理解しやすい。

先ずはここから入って、処理速度や負荷の問題が見えてきたら、
その状況に応じて別のルーチンを考えれば良いと思うよ。



231 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:41:11 ]
そういえば、2007で.netってサポートされてるの?
使える雰囲気が全然無いんだが、2010では.netのサポートがあるかな?
次期Officeにはほかの言語もサポートしてもらえるとうれしいな。

232 名前:デフォルトの名無しさん [2009/05/29(金) 10:02:32 ]
質問です。

コマンドボタンを押すとへこんだままになってしまいます。
処理は正しく実行されて、もう一度押すとまた処理が実行された後に元に戻ります。
使う上で問題は無いのですが、直したいです。
設定が悪いのでしょうか?

233 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:08:25 ]
それ、コマンドボタンじゃなくてチェックボックスだろ

234 名前:デフォルトの名無しさん [2009/05/29(金) 10:15:42 ]
いえ、コマンドボタンです。
確認したら処理は最後まで実行されていたんですが、
見た目だけだと処理がフリーズして止まっている様な感じになります。


235 名前:デフォルトの名無しさん [2009/05/29(金) 10:27:16 ]
解決しました。
今あるボタンを消して新しく作ってみたら直りました。

236 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:38:56 ]
作り直して解決って事はやっぱりチェックボックスだったんだろうな
グラフィックは全く同じだし、押し下げでも上げ戻しでもClickイベント発生するし

237 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 14:18:22 ]
>>231
VSTO使えば.netFrameworkの恩恵をフルに享受することができる。
あまり流行ってないけどね。

238 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 17:50:30 ]
Excel2003のVBAで新規のbookを作ってファイル名を
YYYYMMDDhhmmssにしたいのですが、

Wbook_out = Year(Date) & _
Right("0" & Month(Date), 2) & _
Right("0" & Day(Date), 2) & _
Right("0" & Hour(Now), 2) & _
Right("0" & Minute(Now), 2) & _
Right("0" & Second(Now), 2)

もっと適当な命令や定番テクニックってないですか?

239 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:30:47 ]
>>238
=Format(Now,"YYYYMMDDHHMMSS")

240 名前:238 mailto:sage [2009/05/29(金) 18:39:35 ]
>239

ありがとうございました(ペコリ



241 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:43:43 ]
今、VBAの勉強してるんですが、自分は仕事しててこういう時にVBAが役立った
という経験があったら教えていただきたいのですが。。

242 名前:デフォルトの名無しさん mailto:sage マジでw [2009/05/29(金) 18:59:16 ]
VBAのおかげで彼女が出来ました!

243 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:22:10 ]
>>241
・古いファイルの正規化
・プリンタの変更→印刷→プリンタの変更、をボタン一つで出来るようになったこと
・他人に作ったシートには関数を入れず、ボタンを押して計算させるようにしたこと(何度言っても計算式の入ってるセルに上書きするアホウがいる為)
・ファイル名の一部をシート名にする、等
・彼女は出来・・ねーよwただ仕事上、仲良くなるきっかけにはなったかもしれない
他細かいことは色々あるけど、とにかくまぁ色々便利。特に中小企業でマクロ使えればかなり便利じゃないかな
逆に大企業だと使う場面が無いかと。VBA無しのアクセスの方がよっぽど使う機会が多かった

244 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:29:39 ]
テキストエディタのマクロや正規表現は結構使うけど
Excelのマクロとか、セキュリティ云々でうるさいからあまり使わないなぁ。

245 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:56:05 ]
>>241
VBAのおかげで持病が治りました

246 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:56:47 ]
Sub hoge()
    Dim hoge As Range
   
    If (hoge Is Nothing) Or (hoge.Value = 0) Then
        Exit Sub
    End If
End hoge
なぜかエラー出る@2007

247 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:00:25 ]
>>246
Sub hoge()
Dim hoge As Range
Set hoge = Range("a1")
If (hoge Is Nothing) Or (hoge.Value = 0) Then
Exit Sub
End If
End Sub

set

248 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:32:13 ]
>>247
hogeに値を代入してないのは、値を読み出そうとしたときにエラーを起こさせるためだよ。
VBAはデフォルトでショートサーキット評価ではないみたいだね。
msdn.microsoft.com/ja-jp/library/ea1sssb2(VS.80).aspx
ショートサーキットで評価をするにはOrElseをつかえということだけど
VBAではこれまた制限されてるみたいだね。
If hoge is Nothing then exit sub
if hoge.Value == 0 then exit sub
と分けて書くしかないかな?




249 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:48:53 ]
何をやりたいのか分らんが、こういうことじゃないよなぁ。
Select Case True
  Case hoge Is Nothing, hoge.Value = 0
    Exit Sub
End Select

250 名前:246 mailto:sage [2009/05/29(金) 23:31:58 ]
>>249
おお、それだ。
Select Case Trueとか、なんて変態的なんだw
Delphiのcase Integer of (Cのunionと同義)を思い出させるぜ。

なんかトリッキーすぎて分かりにくいなあ。VBAではこういう書き方って一般的なの?
それとも、Ifを連ねて書く方が一般的?



251 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:53:18 ]
オレはIf〜Elseを並べてる

252 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:39:40 ]
>>250
VBAではごく一般的だと思うけどな。

253 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:55:27 ]
言語によってスパスパ頭切り替えられない奴は
向いてないと思う。

254 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:55:38 ]
職場のEXCEL2000で使うためのマクロを作っています
マクロ自体は自宅の2003で組んでいます。OSはどちらもXPです。

D2とA5のセルにそれぞれ値が入っているときに、D5のセル位置を取得する方法ってありませんか?
Ctrl+Endで移動する位置を取得したいのです。
ActiveSheet.UsedRangeでいけるかなと思ったのですが、セルが飛び飛びで利用されている場合だと
うまく機能しないときがあるようです。


255 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 01:00:33 ]
>>254
www.niji.or.jp/home/toru/notes/8.html

256 名前:デフォルトの名無しさん [2009/05/30(土) 07:39:32 ]
>>241
SQL Server とのやり取りが多いから、使わないと仕事にならねぇ
検索結果をExcelにはくことが多いから
#数万行出す場合、他アプリから出力すると遅さに耐えられないw

テキスト取り込んで簡単な集計する場合とか、ボタン一発のほうが楽じゃね?
#簡単じゃない集計はDBに入れてから処理する

worksheet関数を鬼のように駆使する人は、ある意味すごいと思うけど
VBA使ったほうが、楽になるのに・・と思う場合が多い
後でメンテする場合、Cellを延々と追いかけるの、めんどくないかなと思うんだわ
#いや、自分はめんどくさがりや だから
#まぁ コード書くのが本職なんだけどねw

257 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 07:49:05 ]
数式が長くなると一覧できなくなるのと
コメントが書けないのがワークシート関数の欠点かな
関数一発でいきなり動いて結果が出る手軽さとどっちを取るかだね

258 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 08:56:42 ]
delete押すだけで消えてしまうのも怖い

259 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:19:01 ]
保護

260 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:29:03 ]
行がたくさんあってゴチャゴチャしてるシートの視認性を良くするために
選択したセルのある行に一時的に色をつける処理を考えてるんですが
Private SubWorksheet_SelectionChange(ByVal Target As Range)



261 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:34:59 ]
誤送信失礼。
行がたくさんあってゴチャゴチャしてるシートの視認性を良くするために
選択したセルのある行全体に一時的に色をつけようと考えてるんですが

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Rows(ActiveCell.Row).Interior.ColorIndex = 37
End Sub

でとりあえず色はつけられたものの
カーソルを移動した後もその行は色がついたままになってしまうので
どうにか消せないものかと考えてるんですが、何か方法はありませんでしょうか?

262 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:52:08 ]
消す処理入れてないんだから消えないのは当然でしょ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Cells.Interior.ColorIndex = xlNone
   Rows(ActiveCell.Row).Interior.ColorIndex = 37
End Sub

但し、行強調以外の色つけも全部消えるからね
それじゃ困るというならあとは自分で工夫しな

263 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:57:04 ]
VBA以前にレイアウトを考えたほうが良いんじゃね?

264 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:59:14 ]
あー、なるほど
色をつける前に全消ししてしまえばいいんですね
色をつけたあとに前に選択していた行だけを消そうと考えていたせいで思いつきませんでした
ありがとうございます

265 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:54:29 ]
ワークシートの右端の列にフラグを入れるとか

266 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:01:11 ]
>265

ダッセw

267 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 08:07:29 ]
>>261
実際にやってみると分かるけど、すげー重いぞそれ。
とても実用化出来ないほど重い。

268 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 08:49:31 ]
余程化石なPC使ってるか、余程システムかExcelが腐ってる状態で使ってるんですね

269 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 15:09:59 ]
昔は>>261>>262みたいなのは重くて使えなかったのは確かだが、今のパソコンはそれほどでもないんじゃない?
Excel97が出たころは一工夫して下みたいな十字カーソルをやってた。
もっともExcel97はTargetじゃなくSelectionだったかも。

Dim rng As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not rng Is Nothing Then
  rng.Interior.ColorIndex = xlColorIndexNone
End If
With Target
  Set rng = Union(.EntireRow, .EntireColumn)
End With
rng.Interior.ColorIndex = 8
End Sub

今のExcelは行列番号の色がはっきり違って目立つから全然必要ないと思うんだが。

270 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:34:43 ]
実はたいして変わらないんだけどね



271 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:26:20 ]
他ファイルを処理するプログラムの初期処理で、
選択範囲を保管しておきたいです。

選択範囲がセルなら、Selection.Address
選択範囲が図形なら、Selection.Name

を保管しておけばいいのだろうけれど、
値にアクセスする前に型を判別できないのでエラーになってしまう。
どうしたらよかんべ?

272 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:34:20 ]
>>271
なんでわざわざAddressやNameを保持するの?
Selectionそのものを保持すればいいだけじゃん

Dim hoge As Object

Sub 選択保持()
  Set hoge = Selection
End Sub

Sub 選択復元()
  hoge.Select
End Sub

273 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:09:00 ]
>>272
サンクス。

Rangeオブジェクトのときは上手くいくのだけど、
画像などの場合、他の箇所で切った貼ったを行ってしまうと、
PictureクラスのSelectメソッドが失敗してしまう。

なので、質問したようなやり方をしたいのだ。

274 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:27:31 ]
>>270
今はたいして変わらんかも知らんが、昔の低スペック機では全然違ったのよ。
いったん全部色を消すのは使い物にならなかった記憶がある。

275 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:57:25 ]
>>269のコードと、普通に書いた下のコードを比較してみれば分るな。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
With Target
Union(.EntireRow, .EntireColumn).Interior.ColorIndex = 8
End With
End Sub

2007でA1:J100を順番にSelectさせてみたら、こっちは約10秒で>>269は約2秒だった。
5倍くらい違うということか。
今の高スペック機じゃ一回では体感できないが昔ははっきり体感できたもんな。

276 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:25:29 ]
>>273
セルと図形って言ってただろ?
なんで画像が出てくるんだ?

277 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:28:48 ]
>>275
現行機で0.93秒と、1.75秒だった
10年以上前のPen3 450MHzでも1回当たりの体感に差はない

278 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:54:28 ]
>>277
バージョンによってCellsとかの扱いが違うのかもよ。
とにかくExcel97で275みたいなのは使い物にならなかったのははっきり覚えているよ。
あまり絡むなよ。

279 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:24:30 ]
覚えていること(人の記憶)と、リアルタイムで実践したことでは
当然ながら後者に信憑性があることは言うまでもないわけで。
あまり絡むなよ。

280 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:27:47 ]
本当に嫌な性格だねぇ。
Pentium3の発売が何年か知ってるのかよ。
97年当時Pentium3 450MHzなんてないんだよ。



281 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:33:18 ]
粘着君が97年当時のパソコンをヤフオクで買い求めたりしてw

282 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:38:15 ]
Office97が出た頃にはWindows98の話題が出ていた
多くの人はWin95にOffice97パッケージを乗せずに、
Win98もしくはWin98SEとOffice97が入ったマシンに買い換えた
1999年、Pentium IIIが現れWin98の情報も溢れてきた頃に

283 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:55:11 ]
というか、277は10年以上前のPen3 450MHzって書いてるだけで、10年前にPentium3が無かったってなら
突っ込むのも解るが、10年前にはPentium3の550MHzが出てたし、280は何で絡んでるのかよくわからんな。

284 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:03:41 ]
>>283
話の流れを良く読め。

285 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:09:39 ]
277=279だったら277が粘着してるが、別人だったら>>283の言う通りだね。

286 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:13:12 ]
というか、件のコードが当時は使い物にならなかったってことにしようと
約一名が躍起になってるだけのように見えて痛々しい

287 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:18:41 ]
と約1名が躍起になってるようですね。
ほんと痛々しいね。

288 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:20:39 ]
>>280
化石引っ張り出してきたよ
12年前のPen2 233MHzでも1回当たりの体感に差はない

カーソルキーで連続移動すれば体感差あるけど
カーソルキー移動1回、もしくはマウスクリック1回に置いて
色の切り替わり速度に違いは感じられない

289 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:24:34 ]
結局認めてるじゃん

290 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:28:35 ]
まぁ1回ではって書いたの俺だから、俺が悪かったよ。
気が済んだか?




291 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:30:43 ]
> 今の高スペック機じゃ一回では体感できないが昔ははっきり体感できたもんな。

292 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:32:54 ]
>>289
話の流れを良く読め。

293 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:33:55 ]
だから1回ではってのは間違いだよ。すまんね。
使い物にならないのは>>268も書いてる通りだ。


294 名前:293 mailto:sage [2009/05/31(日) 23:34:53 ]
>>268じゃなくて>>288な。

295 名前:288 mailto:sage [2009/05/31(日) 23:36:45 ]
残念、使い物になってるけど

296 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:00 ]
どっちもファイト!

297 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:27 ]
>>276
Excelのオブジェクトでは、図形に画像は包含されるから。
Shape > Picture
紛らわしい書き方だったか。

298 名前:通りすがり mailto:sage [2009/05/31(日) 23:38:33 ]
いやそもそも
>>288
は真実か?
先ずはそこから検証だ

299 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:40:22 ]
通りすがり
わざわざ書くのは
自作自演

字余り

300 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:43:56 ]
>>299
お前かわいそうなやつだなぁ。
まぁ自作自演じゃないのが分るのは2名だけだけどな。



301 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:46:07 ]
図星か

302 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:49:06 ]
本当の通りすがりは、わざわざ通りすがりであることを
強調する必要もないからな。
当人ではなく第三者的な意見だって事に
しておきたい場合の策だったんだろうがバレバレすぎるw

303 名前:通りすがり mailto:sage [2009/05/31(日) 23:49:12 ]
違うんだけどな
このIDの無い板で自作自演をするのに
わざわざハンドル名付ける必要も
そもそも自作自演する必要も無いんだけどな

304 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:52:03 ]
本当に通りすがりなら、勘違いしてる奴なんて放っておけば良いのに
必死に弁明するから実は通りすがりじゃないことが立証されていく
まさに泥沼

305 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:53:31 ]
>>3.02は普段さんざん自作自演やりまくってるんだよ。
自分がやってるから他人もそうだと思っちゃうかわいそうな人なんだな。

306 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:54:06 ]
>>304
おめー病院逝けよ。

307 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:55:05 ]
> >>3.02
そんなに焦らず、そんなに怯えずに

308 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:03:01 ]
自己を誤魔化しきれなくなると相手の罵倒に走る、正に王道パターンw

309 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:12:16 ]
おまいら会って喧嘩しろよ。
勝った方が正義だw
ファイト!

310 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:16:48 ]
というかその前に静かになっちゃったね
自演で1回線2,3役やってたから連投規制でも喰らったかな



311 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:26:53 ]
かわいそうな人。

312 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:43:01 ]
ほんと、かわいそう

313 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:48:00 ]
>>269>>275を比較してみた。
A1〜J100をループを回してセレクトしてみた。

まずどちらもまっさらなシートで計ったら
>>269 2.2秒
>>279 11秒

次に両方のシートのA1:J5000に"a"と入力してから計ったら
>>269 10.59秒
>>279 23.44秒

>>288はどういう計り方したの?


314 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 02:06:30 ]
すまん、>>269>>275ね。
ちなみにA1:S10000に入力したら12秒と40秒だった・

315 名前:>>261 mailto:sage [2009/06/01(月) 07:23:35 ]
>>267
会社のパソコンでやってみたらなんか処理重いなと思って来てみたら
俺のへっぽこコードのせいで変な議論になっちゃったみたいですね・・・

消すほうも塗るほうも範囲を指定すれば軽くなるのかな?

316 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:34:06 ]
良く分からんけど、changeの度に200ms以上のラグが発生したらNGだな。


317 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:59:23 ]
性能が高すぎるんじゃね?
比較するなら短い方が最低でも2,3秒になるように範囲を調整した方がいいかも。
値が小さくなるほど誤差の影響は大きくなるから。

あとは2007ではなく2003だと、差が少ないのかも知れない。
うちはメインもサブもXPに2003だけど、A1:J100で5回の平均取ったら

メイン 1.6秒:3.9秒 2.43倍
サブ  2.3秒:7.1秒 3.08倍

A1:J200だと

メイン 2.9秒:8.6秒 2.96倍
サブ  4.6秒:14.1秒 3.06倍

って結果になったよ。約3倍ってところで、2003なら5倍までの差は無いみたい。

318 名前:デフォルトの名無しさん [2009/06/01(月) 08:16:53 ]
>>315
気にするな、基地外が一人紛れ込んできただけらしいから。
Excel2000で>269と>>275比べて見たが、はっきり体感差があるよ。
>>277>>288はシートの上の方の行でしか比べてないんだろう。
>>313のように入力して最終行近くで比べれば1回でもはっきり分かる。
A1〜J100をSelectさせてみたら>>269が8秒で>>275が66秒だった。
Pentim D 2.8GHzの結構古いパソコンだけど、もっと昔のExce97当時の
パソコンなら多分>>275は後ろの行ではとろくて使えないと思う。

319 名前:デフォルトの名無しさん [2009/06/01(月) 08:23:23 ]
>>316
だよな。おれも0.2秒ならストレス感じるよ。
しかし最近はSUMPRODUCTなどで鍛えてる人多いから、そういう人たちは我慢強いかもね。

320 名前:318 mailto:sage [2009/06/01(月) 08:41:57 ]
ごめん、>>313のように入力範囲が広ければ別に最終行近くじゃなくてA1近くでもはっきり体感差があるね。



321 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 09:34:35 ]
>>320
1回65536行目近くに移動してから1行目近くににもどった場合>>275は重くなるんじゃじゃね?
1行目近くで軽くするにはオブジェクト変数にMe.UsedRangeをセットすればいいみたいよ。
65536行近くだとやっぱ重いけどな。

322 名前:318 mailto:sage [2009/06/01(月) 09:49:56 ]
>>321
トンクス
試してみたら確かにそうだった。
最初はたしかA1近くでは重くなかったはずなのに途中で重くなったのでおかしいと思ったよ。
なるほどUsedRangeね。

323 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 11:25:22 ]
>>317
結構速いね。
俺はCore 2 Duo3.33GHzだがそちらのサブ機より約3倍近く遅い。
Vistaがクソなのか?
ところで>>313が書いてるように広範囲に入力したの?

324 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:45:14 ]
しかし>>269をさんざん罵倒してたやつある意味すごいよな。
他人の言うことは端から聞く耳持たないらしいけど、変な自信はたっぷりあるんだろうね。
負けることは絶対に許されない人かも知らんね。
前からここや総合相談所に統合失調症の疑いがあるやついるんだが彼かもね。

325 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:19:26 ]
>>323
広範囲に入力しなくても最終行に飛んで1行に戻ってくるだけで重いみたいね。

326 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:02:31 ]
>>325
だったね。

327 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:48:51 ]
速度厨 uza

328 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:44:02 ]
間違いをuzaで済ませられる性格がうらやましいね。
おれなんか落ち込んで死にたくなるよ。
そこをこらえて謝るけどな。

329 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:46:02 ]
一連の気違い発言が327じゃなかったらすまんね。

330 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:07:30 ]
>>324
>>269を罵倒してる奴なんて一人も居ないよ。

>>269の方が優れていることは認めた上で、>>262でも
使い物にならないほど遅くはないって話をしてるだけ。

会社でいつも怒られまくってて被害妄想気味なのかもしれないけど
誰も>>269を責めても攻めてもいないから、よく話を読もうね。



331 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:17:39 ]
来たね。w
もう見苦しいからいい加減やめようや。
会社員ねぇw

332 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:46:01 ]
とりあえず落ち着こう。

333 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:48:06 ]
今頃>>262が使いものになるってアホでつか?
使い物にならない事例がさんざん書かれてるのに見てないのかな。
ほんと見苦しいいいわけにしか見えないや。

334 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:58:00 ]
>>333
まぁまぁ。
辛抱強い人には200m秒はおいて数秒のレスポンスでも遅いと感じないかも知れないんだから。
人それぞれだよ。

335 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:07:01 ]
>>334
なるほどね。
スローライフの人か。

336 名前:デフォルトの名無しさん [2009/06/01(月) 22:23:20 ]
For i = 0 to 20000
   Cell.Interior.ColorIndex = Int(Rnd()*20)
Next i
したらマジで気分悪くなってきた

337 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:50 ]
>>336
最新のExcelはCellsじゃなくてもいいのか

338 名前:241 mailto:sage [2009/06/02(火) 00:36:45 ]
>>243
>>256

今更だけど、どうもありがとう。
勉強初めて一ヶ月経ったけど、ただテキストを最初から読んでいくだけだと、
あまり身につかないものですね。

VBAを使って何をどうしたいという動機が必要なのかな?

339 名前:デフォルトの名無しさん [2009/06/02(火) 02:09:20 ]
>>337
タイポだ。まあ気にしないでくれ。

340 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:02:32 ]
時代の変化を受け入れられないんだね



341 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:40:02 ]
PowerPointのVBAなんだけど、他所にないようなのでここで質問させてほしい。

PowerPointでファイルを開いてVBAを使った処理をするんだけど、
PowerPointにはExcelのGetOpenFilename()に相当するものが存在しないので、
コマンドバーを使ってファイルを開くダイアログを出してみた。
 Application.CommandBars.FindControl(ID:=23).Execute
これを実行してみると、ダイアログを呼び出してすぐに次の命令に進んでしまう。
つまり、新しくファイルを開く前に先に進んでエラーになってしまう。
今はブレークポイントを設定しておき、ファイルを開いてから再実行するということをしている。

タイマーを使うとか考えてみたけど、どうも現実的ではない。
何とかうまくやる方法はないだろうか。

342 名前:通りすがり mailto:sage [2009/06/02(火) 09:55:39 ]
>>341
>>92は駄目?

343 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:57:30 ]
ごめん
これ
閉じてから再実行でした

344 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:27:25 ]
>>338
作りたいものを作って、少しずつ改良していくのがいいと思う

345 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:04:19 ]
>>338
やりたいことがわからないで勉強しても無意味だよ
学校に通ってても英語の勉強が今では何の役にも立たないのと一緒

毎回これやるのめんどくせぇな、、、、なんとかならんかな、、、
からvba勉強し始めると
ここの人の手助けもあって2週間位で株の自動発注から返済までが組めるようになった

346 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:09:08 ]
株ねぇ
そういえば俺の尊敬する株屋さんどこ行っちゃったんだろうな。
某Q&Aサロンで女性になりすまして活躍してるという噂を聞いたが。

347 名前:デフォルトの名無しさん [2009/06/02(火) 18:21:01 ]
さっき図書館でSE関係の新刊があったのでパラパラとめくりながら読んでたら、
”VBAにいくら習熟しても金にならないから、優秀な人はどんどん他の言語に移っていく。
VBAは下っ端の奴がやらされる仕事だ。”
みたいな意味の事が書いてあった。

薄々、同じような事を思ってたけど、いざ活字で目にするとショックだ。


348 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 18:52:54 ]
質問です。

少し時間のかかる処理をさせているんですが、
その処理が動いてる間、
ボタンなしのダイアログ等で『処理中』と表示させ、
処理が済んだら自動で消す、
といったような事はできますか?

349 名前: ◆.jruuB3RTA [2009/06/02(火) 19:06:59 ]
Cells(Rows.Count,1).End(xlUp).Select

Endプロパティは連続したデータ範囲の終端セルを返すので、
表の途中に空白セルがあるとデータを返せない。
と、テキストには書いてあるのですが、
空白セルがあったら、Null値とか文字列とかを入れるプログラムは書けませんか?

350 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:20:53 ]
>>347
んっとだな。
VBA単体では金にならない。ってのが正しいと思うよ。

事務処理業務+VBA とか、何かの基礎に付随する能力としてのVBAは金になる。

VBAだけしこしこ組んで金にはならん。
DB+VBAとかでも生活出来る程度の金になるし、
転職する時には凄く大きなアドバンテージになる。



351 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:24:14 ]
>>348
ユーザーフォームで。
もしくは別シートを表示させるとかね。

>>349
何のデータを返したい?
表の途中に空白があったら、そこに文字列を入れたいのかな?
それならば、forで上から判定させながら入れて行くのが良いんじゃないかな。

for i = 1 to cells(rows.count,1).end(xlup).row
if cells(i,1).value = "" then
cells(i,1).value = "空欄"
end if
next

みたいに。

352 名前: ◆.jruuB3RTA [2009/06/02(火) 19:30:15 ]
>>351
どうもありがとう。
こんな短時間で答えられるなんてすごいなぁ。
図々しくて申し訳ないんだけど、

rows.count,1

の1って、どういう意味ですか?
すいませんが宜しくお願いします。


353 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:42:16 ]
Cells(Rows.Count, 1)..SelectとかCells(Rows.Count, 2)..Selectなどやってみれば分りますよ。

354 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:09:13 ]
>>351
ユーザーフォームとは、、
まだ始めたばかりで余り単語とかも分からず…

355 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:01:54 ]
>>348
VBAでプログレスバーっていうのはどこかにあるよ

356 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:47:46 ]
プログレスバーってのはvbaだけですよね?
excelで使いたいんです。。。
通常のVBは入ってないので。

357 名前:デフォルトの名無しさん [2009/06/02(火) 21:54:20 ]
>>347
あくまで道具の一種ですよ。
ほかの言語でやる必要があればその言語を使えば良いだけ。
並列言語とかをのぞけば、要件抽出して、適当にクラスをモデリングするという基本的な作業は変わらん。

>>350
>DB+VBAとかでも生活出来る程度の金になるし、
それは他の分野で優れていて、なおかつそういうサブスキルがあればその分有利になるってだけの話だろ。
それだけで食っていけるなら、失業者なんて出ないよ。

358 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:56:38 ]
以前、FileSearchについて質問した者です。

更に質問なんですが、
FileSearchで見つかったファイル、ファイルパスをシートにリストにしているんですが、
その見つかった数だけ、隣にコマンドボタンを自動で作り、そのボタンで隣のパスのファイルを開く、
という動作はできますでしょうか?


359 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 22:08:23 ]
プログレスバーの例
www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html

>>358
ボタンじゃなくて、リンクではどうよ

360 名前:254 mailto:sage [2009/06/02(火) 23:32:35 ]
>>255
遅ればせながらありがとうございました。
リンク先S4でやりたかったことができました。



361 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:43:00 ]
>>359
リンクでやってみようと思います。

それから、FileSearch実行中にステータスバーに検索状況を表示しようと思っているんですが、
どのタイミングで記述すればいいか分かりません。
以下ソース一部です。

.SearchSubFolders = True ' サブフォルダも探索

If .Execute() <> 0 Then
For Each vntF In .FoundFiles
With objFSO.GetFile(vntF)
GYO = GYO + 1
Cells(GYO, 1).Value = .Name
Cells(GYO, 2).Value = .DateLastModified
Cells(GYO, 3).Value = _
Left(.Path, Len(.Path))
With Worksheets("Sheet1")
.Hyperlinks.Add anchor:=Cells(GYO, 3), _
Address:=Cells(GYO, 3).Value
End With
cntFound = cntFound + 1
End With
Next vntF
End If
End With


362 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:22:43 ]
>>349
>>空白セルがあったら、Null値とか文字列とかを入れるプログラム
Cells(Rows.Count, 1).SpecialCells(xlCellTypeBlanks) = "Nullとか文字列"
はだめ?

363 名前:341 mailto:sage [2009/06/03(水) 01:13:32 ]
だめかなー

364 名前:デフォルトの名無しさん mailto:age [2009/06/03(水) 07:07:54 ]
vbaって廃止されるの?
VSTOだけになっちゃうの?

365 名前:デフォルトの名無しさん [2009/06/03(水) 07:19:18 ]
VBAって何の為にあるのだろう?
昨日、VBAを使ってACCESSにつなぐのが1時間くらいできなくて、
さっきExcelのリボンからやってみたら1分でできた。
俺の頭が悪いだけなのかw

でも、VBAやったおかげで、他のスクリプト言語の理解度が深まった気がするから、
やはり、勉強してみて良かったのかな?

366 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 07:36:02 ]
>>365
お前ではどんな言語をやっても意味ないだろうな

367 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:15:48 ]
単一の機能を呼び出すだけなら、1時間もかかるのはバカだからだとしても
VBAのコード書きからやるよりは、メニューやリボン、ツールバーなどからの方が速くて当然

VBAは主に何度も行う定型処理や規則処理、連続処理などに使う
スクリプトも使うならそのくらいわかりそうな物だけど

368 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:16:13 ]
VBAって補助的なツールとして使うだけだな。
使えればそれなりに作業効率がアップする程度かな。

369 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:56:47 ]
最初は時間かかってもいいからとにかく動くものを作って理解する
作ったものはエクスポートして保管しておく
後はそれをコピペして改造しながら使っていく

VBAを飯の種にしてる人以外はこんなもんじゃね?

370 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 09:55:35 ]
純粋にVBAだけで食ってるのは、本書いたり教室で教えたりの人だけじゃね?

俺は全社の業務効率化の為にVBAだけで仕事してるけど、
それでも会社の事知らないと作れないから、それだけで食ってるとは言い難いな。



371 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:20:28 ]
VBAもピボットも機能の一つでしょ。それ以上でもそれ以下でもない
使いどころを間違えれば仕事が遅くなるのは当然

372 名前:341 mailto:sage [2009/06/03(水) 22:14:25 ]
>>366
はは。他の言語とか、そんなことないんだけどなー。
Office VBAはやらなかったもんでね。
オブジェクトモデルも理解してないんだよ。

さっと教えてみてくれよ。

373 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:42:57 ]
>>372
www5c.biglobe.ne.jp/~yamag/data/Soft/VBAProgramingTIPS.html
WordにもGetOpenFileNameがないらしいので参考にすれば



しかし、ここはExcel VBA質問スレだ
二度と来るな

374 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:02:19 ]
>>361ですが、
特にレスがないってのは出来ないって事でしょうか・・・

それともここにはそれだけの知識を有した方がいないんでしょうか

375 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:18:19 ]
もう来んな。臭すぎて気分悪いわ。

やっぱり俺が出て行くわ。

376 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:04:06 ]
> それともここにはそれだけの知識を有した方がいないんでしょうか
そうだよ、だから帰ってね

377 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:19:07 ]
>>341
PowerPointから
CreateObject("Excel.Application")して
GetOpenFileNameするってのもありか

378 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:59:12 ]
>>374
まあファイル総数を調べた後に1つ1つカウントすればいいんじゃね?
簡単だろ?わからないなら1から10までカウントのプログラム書いてみ?セルに表示するやつ
あとはそれをどう表現するかの問題。セルに色塗ったり、色付きラベルの長さを伸ばしたり・・・
コントロールもあったかもしれん

そもそも経過処理表示を本気で実装するのは難しい(無理)
インスコ等でも分かると思うが、人間の感覚と処理経過に乖離が発生する。

379 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 03:09:35 ]
>>374
「vba ステータスバー」でググった一番上。まさにこれかと・・・
そもそもfor文使ってるのに意味分かってないのがアウツ

380 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:52:18 ]
おまえらほんと優しいな、あからさまに煽ってるやつの相手してあげるなんて



381 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:25:18 ]
で?

382 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:35:17 ]
って

383 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:50:09 ]
     /ニYニヽ
    /( ゚ )( ゚ )ヽ
   /::::⌒`´⌒::::\   呼んだ?
  | ,-)___(-、|
  | l   |-┬-|  l |
   \   `ー'´   /

384 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:08:08 ]
XP、Office2003を使用しています
IEのherf="javascript:clickQuickLink('summary');"
これをクリックしてページの推移をしたいのですが

このリンクをマウスでクリックするようにvbaでクリックする方法を教えていただけないでしょうか
よろしくお願いいたします

385 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:40:56 ]
>>384
VBAを使ってのExcelの操作ではなくIE(IEオブジェクト)の操作はスレ違い>>4

386 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:30:08 ]
いちいち言わなくてよろしい

387 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:32:16 ]
言わずとも解ってる人には言わなくても良い
言わないと解らない人には言う必要がある

スレ違いな質問しちゃう人は後者なので言う必要がある

388 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:54:06 ]
ほっとけばよろしい

389 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:00:08 ]
寛容と無秩序を取り違えている人?

390 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:13:58 ]
うざいよ



391 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:17:48 ]
スレ違い認定はもういいよ

392 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:11:47 ]
論では返せず

393 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 19:14:19 ]
ならツモで

394 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:27:47 ]
>>361です
見付かったファイル状況ならもちろん分かります。

検索しているファイルのカウントを表示させたいんですが、
どこでどのオブジョクトを見ればよいのかが分かりません

395 名前:デフォルトの名無しさん [2009/06/04(木) 23:03:46 ]
世の中に自分で書いたソースが理解できない奴なんて居るの?

396 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:04:40 ]
2年前のソース理解できませんでした。サーセンwww

397 名前:341 mailto:sage [2009/06/04(木) 23:04:55 ]
>>373
えらい人だね

>>377
> CreateObject("Excel.Application")して
なるほど。 明日から出張なんで、帰国したら試してみる。
ありがとう。

398 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:37:34 ]
スレタイ見ようぜ。

399 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 00:10:03 ]
executeした後に、どこにファイル検索数を持ってるんでしょう?
プロパティやオブジェクトもググっても見つからないし、
executeしたらその.Executeの中身はすぐにhit数になってるし。

400 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:54:53 ]
オブジョクト



401 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:56:30 ]
オブジョイ

402 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:12:57 ]
オブジョイト

403 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:46:46 ]
EXCELの自動計算がとまってしまうことがあります
オプションの自動計算のチェックボックスはonのままです

とりあえずマクロの
Private Sub Worksheet_Calculate
を削除したところ止まらないようになりましたけど・・


原因がわかりません

404 名前:デフォルトの名無しさん [2009/06/05(金) 21:45:53 ]
Worksheets("Sheet1").Delete
これをVBAで実行すると、シートを削除するときに本当に消していいのかという
確認ダイアログを求められるのですが
これを出さずに強制的に削除する方法ってあるのでしょうか?

405 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:58:29 ]
>>404
Application.DisplayAlerts = False

406 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:07:20 ]
>>403
そのマクロの中身がわからんことには…

407 名前:VBA暦12時間 [2009/06/07(日) 14:49:37 ]
すみません
初歩的な所ではまっています。

下記の処理は、
”■”なら16行目に値をカウント
”□”なら17行目に値をカウント
という処理をしています(4列目に実際に加算したい数値が入っています)

この場合、何回もボタンを押すとどんどん値がふえてしまうのでボタンをおしたタイミングで16行目と17行目を0クリアしたいのですが、
コメントにしている部分を解除にすると、なぜか計算がされません。(0のまま)
どなかたどうかご教授よろしくお願いいたします。

Private Sub CommandButton1_Click()

For 列 = 5 To 27
For 行 = 5 To 10
' Cells(16, 列) = 0
'Cells(17, 列) = 0

If Cells(行, 列) = "■" Then
Cells(16, 列) = Cells(16, 列) + Cells(行, 4)

ElseIf Cells(行, 列) = "□" Then
Cells(17, 列) = Cells(17, 列) + Cells(行, 4)
End If
Next
Next
End Sub

あと自分のレベルで参考になるVBAサイトもご紹介いただけると助かります。
よろしくお願いいたします

408 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:52:12 ]
0にクリアするところはFor文の外にしなきゃだめだよ

409 名前:VBA暦12時間 [2009/06/07(日) 16:42:40 ]
うわっ!俺あほだ!
ありがとうございました!

410 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:46:57 ]
Option Base 1
Sub a()
Dim a
Dim b(3, 3)
'空いてる数字探し配列bに入れる
For n = 1 To 10000000
a = Range("a1:c3")
For i = 1 To 3
For k = 1 To 3
If a(i, k) <> 0 Then
b(i, k) = a(i, k)
End If
Next
Next
'実際に作成
For i = 1 To 3
For k = 1 To 3
If a(i, k) = 0 Then
'bにない数字を探す
Do
c = Int(9 * Rnd + 1)
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk




411 名前:410の続き mailto:sage [2009/06/07(日) 20:48:22 ]

Loop
fjk:
b(i, k) = c
End If
Range("a10:c12") = b
Next
Next
Next
If (1 = 2) Then
Exit Sub
'ここまで

If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
の時点で型が違いますとエラーが出ます、これは何故でしょうか?
ワークシート関数matchで検索し、配列bの中にcがあるかどうかを調べようとしているのですが、cがどんな数字でもエラーが出てしまいます。どうしてでしょうか?

コードの主な内容は、A1:C3を元に乱数で魔方陣を作ってみようというものです
配列aはA1:C3セルの数字、配列bは一時的な計算用配列です


412 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:43:55 ]
型が違うってことは型が違うんだよ!さっさと死ね!

413 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:32:48 ]
え・・

414 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:38:09 ]
んー。癖が強すぎるコードだなぁ。
余談だけど、こんな書き方を推奨してる参考書でもあるの?

条件指定なしのdoを使ってる所見ると、他言語で覚えたかな。
if thenでGoToに飛ばすコードは記憶の限りでは初めて遭遇したんだけど、
他の言語だと一般的なのかな?後学の為に教えてください。

cが宣言無しで突如出てきてるのは、まぁ良いのか。
bは2次元配列のはずなのに、matchでは何も指定されてないけど、
そこが問題じゃない?

415 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:39:10 ]
Windows:XP
オフィス:2003


VBAの勉強を始めようとセルの結合や色付けなど
ごく初歩的なマクロを使ってるのですが
マクロで実行した操作を戻ることはできないのでしょうか?

たとえばA1:B1セルの結合をすると
戻るボタンがグレーになり、保存せずに閉じて開きなおすしか戻る方法がありません。
これをマクロで実現するにはどうすればよいのでしょうか?

416 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:00:29 ]
>>414
おお!ありがとうございます!!そこでした
doloopとgotoは今回始めて使いました。参考書とかは特に見ていません。
普通はuntilなどと組み合わせるのですね

ワークシート関数のmatchは↓のページを参考にしたのです
ttp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200706/07060141.txt
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
でも
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
でも型が違うとエラーが出ます。何が悪いのでしょう?
↓できるだけまとめてみました

Option Base 1
Sub a()
Dim b(3, 3)
For i = 1 To 3
For k = 1 To 3
b(i, k) = 5
Next
Next
Do
c = 5
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
Loop
fjk:
End Sub


417 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:08:05 ]
matchなんて使った事無いんだが、2次元配列内を一発で検索出来るのか?それ。

418 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:09:01 ]
>>415
マクロで実行した物は戻せない。
結合したものを解除したいなら、結合を解けば良い。

419 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:48 ]
>>417
可能ですよ。存在してたら数字、存在してなかったら型が違うとエラーになります。
ただ>>416ではウォッチ式見ても型も同じです
Sub a()
Dim myary
myary = Array( _
"加入者番号:", "加入者:", "会社名:", "登録日:", "加入日:", _
"予定事項:", "担当者:", "部門:", "区分:", "住所:", _
"請求書住所:", "電話:", "請求書電話:", "アドレス:")
MsgBox Application.Match("登録日:", myary, 0)
End Sub


420 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:53 ]
>>416
釣りだよな?



421 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:54 ]
>>420
違います。
本気で分からないので教えてくださいorz

422 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:15:54 ]
>>419
それじゃ1次元配列じゃないか。

423 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:30:29 ]
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk

b(2,2)が配列もしくは範囲ではないから

424 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:34:55 ]
>>419
Sub test111()
Dim ar As Variant
ar = [{1,2;3,4}]
MsgBox Application.Match(1, ar, 0)
End Sub

2次元配列にmatch掛けられないじゃないか。
存在していても型エラー出る。


425 名前:416 mailto:sage [2009/06/07(日) 23:46:36 ]
申し訳ございませんでした!

426 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:28:10 ]
>>414
BASICではそもそもIF THENの後のGOTOは省略できるってほど
THEN GOTOが人気だったんだぜ…

>>416
この用途だと Exit Doで十分だな。
というか、今時GoToなんて苦行する必要ない。
GOTO 、GOSUBなんてのはユーザー関数が無かったころの名残。

427 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:59 ]
テキストとか読み込みとき、Line InputとFileSystemObjectの機能とどっちを使うほうがいいの?

428 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:25:23 ]
       ,-┐
 ,ィ─、ri´^-─- 、 .┌f^f^f^f^f^f^f^f^f^┐
く  / , ,'   ヽ ヽ| ~ ~ ~ ~ ~ ~ ~ ~ ~│
 `<' / ,'レイ+tVvヽ!ヽト 知ってるが  │
  !/ ,' i |' {] , [}|ヽリ  お前の態度が |
  `!_{ iハト、__iフ,ノリ,n   気に入らない |
   // (^~ ̄ ̄∃_ア____n_____|
 _r''‐〈  `´ア/トr──!,.--'
<_>─}、  `」レ
'ヽ、   ,.ヘーァtイ
   Y、.,___/  |.|
    |  i `ー'i´

429 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:04:04 ]
昔はLine Inputだったけど、今ならFileSystemObjectを使うのが一般的

430 名前:427 mailto:sage [2009/06/08(月) 22:14:12 ]
>>429
レスさんくすです



431 名前:デフォルトの名無しさん [2009/06/08(月) 23:15:19 ]
Function Line(args1)
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[args1]:R30000C[args1],RC[-1])"

こういう感じでargs1を変数にして呼び出し元で中身を変えて実行したいのですが
どうしてもうまく来ません
どうやればいいのか教えてください

432 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:46:53 ]
>>431
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[" & args1 & "]:R30000C[" & args1 & "],RC[-1])"

433 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:58 ]
俺なら
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", "1")
とやる事が多い

434 名前:433 mailto:sage [2009/06/09(火) 09:53:58 ]
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", args1)


435 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:42:12 ]
質問です。

例えばですが、「abcdefg」といった文字列に、「def」が含まれているか、
といった処理をさせようとしているんですが、どうやって比較したらよいのでしょうか?

*def*または、?def?の使い分けもできるようにしたいんですが、可能でしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:50:42 ]
>>435
InStr
正規表現

437 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:40:03 ]
*def*と?def?の使い分けIをnStrでどうやるんだろ?
俺には分らんな。
Like演算子なら使い分けは簡単。
"abcde" Like "?bcd?"ならTrueだが
"abcdef" Like "?bcd?"ならFalseだ。

438 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:35:40 ]
正規表現なら、

.*def.*
.def.

だぬ。

439 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:50:52 ]
ADOからSQLで"*def*"とやるとエラーになんだよね
"%def%"もしくは"_def_"と覚えたほうがいいと思う

440 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:09 ]
>>437
横スレだけど、
len(str) が5文字かつ、instrが2なら "?bcd?" に該当するんじゃないかな。
正規表現やlike演算子使った方が楽だけど。



441 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:21 ]
×スレ
○レス

442 名前:437 mailto:sage [2009/06/10(水) 19:43:01 ]
>>440
なるほど。

443 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:11:04 ]
よこだっ!いいぞ!いいぞ!そう!よこっ!すれっ!すれっ!!よこすれっっ!!!

444 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:54:02 ]
質問です。

「マクロ→セキュリティ→Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れるのを、
マクロで行う事って出来ないんでしょうか?

445 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:59:50 ]
>>444

何のウイルスを配布するつもりなの?

446 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:16:43 ]
OS:Windows XP Professional SP2
Excel:2000

以下2つなのですが、参照している列と値を格納する配列以外は全く一緒です。
引数の参照渡しとかでまとめることはできませんか?

Yousosu=0
For Each Youin In Range(Cells(36,3),Cells(49,3))
  If Youin.Value="" Then
    ReDim Preserve Joken1(Yousosu)
    Joken1(Yousosu)=Cells(Youin.Row,2).Value
    Yousosu=Yousosu+1
  End If
Next


Yousosu=0
For Each Youin In Range(Cells(36,4),Cells(49,4))
  If Youin.Value="" Then
    ReDim Preserve Joken2(Yousosu)
    Joken2(Yousosu)=Cells(Youin.Row,2).Value
    Yousosu=Yousosu+1
  End If
Next

447 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:54:09 ]
できま

448 名前:427 mailto:sage [2009/06/11(木) 01:05:01 ]
s(ry

449 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:13:20 ]
すぇん

450 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:00:42 ]
>>446
異なる部分を引数にもつ関数作れば?



451 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:59:51 ]
>>446
やりたいことが分からんけど

Dim Joken(36 to 49, 3 to 4)

For i=36 to 49
If Cells(i, 3).value = "" Then
Joken(i, 3)=Cells(i, 2).value
endif
If Cells(i, 4).value = "" Then
Joken(i, 4)=Cells(i, 2).value
endif
Next i

452 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:06:37 ]
>>444
レジストリ

453 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:25:43 ]
VBAの年月を取得したいのですが

以下のように作成したのですが、

年:XXXX 4桁で取得できました。
月:XX 2桁ができません、1桁になります。

  5月なら05として取得したいのですが、修正方法がわかりません
  A1には、2009/5/1と入力しています。

VBAに詳しい方で簡単に、どうぞお願いします。

Sub sample()
Dim myDate As Date
myDate = Range("A1").Value

Range("B7").Value = Year(myDate)
Range("C7").Value = Month(myDate)
Range("D7").Value = Day(myDate)

End Sub


454 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:51:04 ]
>>445
>>452

ウイルスとかじゃなくて、あちこちアップデートが必要ににりそうなファイルを
自動でパッチあてる感じにしたいんだ

レジストリはVBEマクロでいじれるもんなの?

455 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:56:16 ]
>>453
A1が日付なら
Range("B7").Resize(, 3).Value = Split(Format$(Range("A1").Value, "yyyy/mm/dd"), "/")
の1行で充分じゃね?

456 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:19 ]
>>453
書式設定か、

Range("C7").Value = "0" & Month(myDate)

457 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:00:18 ]
>>450
そうなのですが、いろいろ試してもうまくいかなくて…

>>451
すみません。どんな動作をしたいか、書いておくべきでした。
なるほど…2次元ですか。
ただ、できれば動的配列にしたいかなぁなんて思ってまして。
2次元だと、Preserveは片方にしか利かないとか。

ありがとうございました。また、自分でも考えてみます。

458 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:03:50 ]
>>456
それじゃ10月は010になってまずいんじゃないかなぁ。
右2文字を取り出せばいいけどね。

459 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:25:21 ]
>>455
>>456
サンクス
 宣言した変数(例、TTTTTTT)に05を文字列として入力したい)

 A1に2009/5/1と入力して、あるフォルダの2009年05月XXX.xlsというファイルを
 読み込むマクロを書いています。

 よろしくお願いします。

460 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:29:22 ]
>>453
Range("C7").Value = "'" & Format(myDate, "mm")

これじゃダメかな?



461 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:35:54 ]
>>459
Format$(Range("A1").Value,"yyyy年mm月XXX")の文字列を作ってWorkbokks.Openと組み合わせるだけ。

462 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:25 ]
>>460
できました。
 サンクス
   , - ,----、
  (U(    )
  | |∨T∨
  (__)_)


463 名前:デフォルトの名無しさん mailto:  [2009/06/12(金) 01:08:40 ]
取得した文字列を、すでに宣言した変数名と一致させて
使いたいのですが、できますか?
やりたいのは

Dim ABCDE As Integer
Dim moji As String

moji = AB
"moji"CDE = 5

みたいな感じです




464 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:32:11 ]
>>463
変数はただの入れ物だから、無理じゃないかなぁ

何がやりたいか詳しく書いてくれたら、
別の方法になるかもしれないけれど、実現できるコードを考えられるかも

465 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:26:27 ]
>>464
たぶん>>463が言いたいのはリフレクションを使って
動的に変数を追加・参照することは出来ないかってことじゃね?
そんなことをして、なんになるのか分からないが、そういうことだと思う
# javascriptで関数電卓のフレームワーク+プラグイン(関数やらが定義されてたりする)を作ったときに使ったくらいかな?

たぶん、VBAのリフレクションは貧弱だから出来なさそうな気がする。
だけど、サンプルを見る限り、連想配列で良いんじゃね?って思うな。

最終的にやりたいことは
userStatus("Jonson") = "空腹"
userStatus("Harris") = "眠い"
userStatus("cherry") = "ピヨピヨ来た"
ってことでしょ。

VBAでどうやって連想配列を使うか知らないけど。
# たぶん、つかえないだろうなぁ
# 無かったら、自分で作ればいいけど、速度面でどうなんでしょうねぇ。
# 下手なハッシュ関数作るより、 配列二つ並べて、逐一中身を検索した方が早かったりしてw

466 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 05:21:46 ]
>>463
okwave.jp/qa2033484.html
これみたいなカンジ?

467 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:05:14 ]
>>465
なんか、全然わかってなくて書いちゃって恥ずかしいっす。
教えてくれてあんがと。

連想配列の使い方を調べたら、Dictionaryオブジェクトだらしいです。

468 名前:463 mailto:  [2009/06/12(金) 07:51:24 ]
"moji"CDEってのが変数ABCDEのつもりです


たとえば
takeda
aoyama
tanaka
sirakawa
aoyama
koyama

みたいな50種類くらいの名前がかぶりつつ列挙されてて、それぞれ何個
でてきたかしりたいのです。
変数 aoyama_name,koyama_name,takeda_name
と人数分の変数を宣言しておいて、セルの文字列を順に取得し、
その文字列に対応する変数にカウントしていく方法ができないかと



469 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:13:29 ]
該当したらインクリメントすりゃ良いんでないかい?
Instrでもlikeでも正規表現でも、何でも良い様な気がする。

470 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:34:58 ]
>468 こういうことでいいのかな。
A列に(1行目から)集計対象があり、B列、C列に集計結果を出力する。
Option Explicit
Dim 名前(100) As String, 件数(100) As Integer, i As Integer, i_max As Integer, 縦 As Long, 内容 As String
Sub カウント()
  Call 初期処理
  内容 = Cells(縦, 1).Value
  Do While (内容 <> "")
    If i_max = 0 Then
      名前(0) = 内容: 件数(0) = 1: i_max = 1
    Else
      For i = 0 To i_max
        If 内容 = 名前(i) Then
          件数(i) = 件数(i) + 1
          Exit For
        Else
          If i = i_max Then
            名前(i_max) = 内容: 件数(i_max) = 1: i_max = i_max + 1
            Exit For
          End If
        End If
      Next i
    End If
    縦 = 縦 + 1: 内容 = Cells(縦, 1).Value
  Loop
  For i = 0 To i_max - 1  '集計結果の出力
    Cells(i + 1, 2).Value = 名前(i): Cells(i + 1, 3).Value = 件数(i)
  Next i
End Sub
to be continued



471 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:38:23 ]
続きです
Private Sub 初期処理()
  For i = 0 To 100
    名前(i) = "": 件数(i) = 0
  Next i
  i_max = 0: 縦 = 1
  Exit Sub
End Sub
以上
出現順に名前を格納する配列と件数を格納する配列を用意して、セルの内容を読み込む都度
名前配列を順に調べていく、初めてならば添字を+1して名前を格納し、同じ添字の件数配列
に1をセットするというやり方です。もっとスマートな方法があればお知らせください。

472 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:25:10 ]
>>468
Excelの本来の機能は表計算ソフトだから、個数を集計する方法はいくつもあるよ。
COUNTIFとかピボットテーブルとか。
VBAだけでやろうとするより、ワークシートにデータを入れちゃって集計の関数を使った方が早い。

VBAだけでやりたいならDictionaryって便利な機能がある。同じ物があったかどうかのチェックが
とても簡単。

Sub 集計()
  Dim name() As String  'テスト用データを用意
  name = Split("takeda,aoyama,tanaka,sirakawa,aoyama,koyama", ",")
  Set dic = CreateObject("Scripting.Dictionary")

  For Each n In name  '配列で集計
    If dic.exists(n) Then
      dic(n) = dic(n) + 1
    Else
      dic.Add n, 1
    End If
  Next

  For Each d In dic  '結果出力
    Debug.Print d, dic(d)
  Next
End Sub

473 名前:470 mailto:sage [2009/06/12(金) 13:14:48 ]
>472
こういうことができるんですね。
集計対象データが大量の場合は、いったん文字列変数にに","をはさんで連ねていくことになりますね。
Dictionaryの機能は半角英数の大文字・小文字の別とか日本語対応はどうなんでしょう。


474 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:25:58 ]
>>473
あくまでもサンプルだから , で区切ったデータを用意したけど、
実際のデータはワークシートやファイルから読み込むのが普通。
キーワードには日本語も使える。英字の大小は区別される。
データを "鈴木,高橋,山田,田中,鈴木,高橋" に変えて試してみ。

475 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:28:42 ]
50件程度なら重複チェックを省略しても、とりたてて問題はない。

  For Each n In name  '配列で集計
    dic(n) = dic(n) + 1
  Next

たったこれだけで集計できる。
データが増えると遅くなるけど。

476 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:22:18 ]
UserFormから数式を入力させて、その数式に該当するセルに処理を行いたいのですが、
ヒントになるサイトか関数などあれば教えてください。よろしくお願いします

477 名前:463 [2009/06/12(金) 16:27:12 ]
実は集計するだけではなく、
高橋 100点
三根 98点
山田 100点
高橋 100点
青山 97点
山田 99点 
(50人くらい、データは1000件くらい)

で100点の人だけ集計して100点の高橋が何人いて、
100点の山田が何人いるみたいなことをしたかったので、
100点で検索して左のセルをみて、
文字列を取得して、その取得した文字列と
関連するの配列名にカウントしたかった
のですが、どうもdictionaryでできそうです。
みなさんありがとうございました。

478 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:27:50 ]
「数式に該当するセル」が意味不明
実例を示せ

479 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:15 ]
>>477
その程度ならVBAなんぞ使わんでも一発で集計できるがね


480 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:43:26 ]
>>478
失礼しました

やりたいことは条件付き書式設定のようなことで、
例えば

30
20
50
60
40
80

というセルを選択した後、ユーザーフォームから数式を入力してボタンを押すと
数式に該当するセルに対して、処理を行うということです。
条件付き書式設定を使えというのは無しでお願いします。。。



481 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 17:31:32 ]
列なの行なの?
なんなのその数字。

482 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 18:13:09 ]
Chr(13)とvbCrlfの使い分けの判断は何?

483 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:49:23 ]
vbCrLf = Chr(13) & Chr(10)
Chr(13) = vbCr
Chr(10) = vbLf

484 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:11:04 ]
>>482
改行コードは状況によって変わることがあるから
Chr(13)とかChr(10)とかに固定すると具合が悪いこともある

485 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:20:26 ]
ぜんぜん「数式に該当するセル」の説明になってない…

486 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:26:08 ]
俺がエスパーすると
数式の解に該当する数字の入ったセル

487 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:58:14 ]
数式: >=50
数式に該当するセル: 50 60 80

ってことじゃね

488 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:10:30 ]
俺がエスパーすると、

フォームから「A2=A1+10」と入力する。A1に5が入っていたとしたらA2に15を入れる。

どうだ?

489 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:27:04 ]
463が説明しようとする度にエスパーが大量に必要になりそうな悪寒
何をどうしたいのか細切れに話そうとしてるからますます判らん w

490 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:28:17 ]
       ____
     /_ノ  ヽ、_\
   o゚((●)) ((●))゚o   ,. -- 、
  /::::::⌒(__人__)⌒:::::: /    __,>─ 、
  |     |r┬-|    /          ヽ
  |     | |  |   {            |__
  |     | |  |    }  \       ,丿 ヽ
  |     | |  |   /   、 `┬----‐1    }
  |     | |  |  /   `¬|      l   ノヽ  wwwwwwwwwwwwwwwww
  \      `ー'ォ /    、 !_/l    l    /  }
           {       \     l   /  ,'
           \      ´`ヽ.__,ノ  /   ノ
             \     ヽ、\ __,ノ /
               ̄ ヽ、_  〉 ,!、__/





491 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:49 ]
>>480
数式からEvaluateで戻り値を求めて、その戻り値でフィルターにかけりゃいいじゃん。
それともフィルタオプションで検索条件範囲の1行目を空白にして、2行目に=A2=数式と書きだして抽出するとかね。

492 名前:491 mailto:sage [2009/06/13(土) 16:24:49 ]
俺のエスパー度はマグニチュード7くらいの自信があるから上で間違いないな。

493 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:52:40 ]
463まとめ
>>463
>>468
>>477
>>480


494 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:30:24 ]
>>493
仲間はずれがいるぜ。
>>480>>476だな。

495 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:23:18 ]

                  /   ノノ ノノノ ヾヽ、ヽ
               /   ノj `      ´ i |    
               i    {   ` , ,-,、´  i | 
              {    i     )-―-'(  i |    
                 ヽ   i     ⌒   } |_,,,. -‐- 、  
              __)), ,ノ人   、_,  ノ''"´   ,      \ 
                /       ` ー--,. '´   . : :`(      ゝ、
               /           : : :: :´: .         : :\ , ' ´_   ヽ
           /  r´: :       : : : :       ,. ' ´ ヽ>'´    ,'ヽ!
             / γ: :        ノ    _   ,, 、,, ,,__i  。 ./       ; ,!
           i   ir' " ヽ    ,,, ''' ´         `"7         :/ 
         i  |、 ° }, '                 ` y'         /
   "'''‐‐- ...,,,_|   ヽ、ー/           __    _/          /
             `'''-,,,て          ´    ̄ ̄ /          ,イ 
             `''-、__/            /    `  / ,!    _,
                     `''-,,_     ,..、_,,..イ´      i'´  `ゝ''"´
                    \_ ,,,,,...ゞ、_           |ー-/  
                           ミ〉       !r'´
                         ヽ   ミ/、 /|  i  i }







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef