Excel VBAについて

このエントリーをはてなブックマークに追加
1りゅう
EXCELの97、2000、XPの相違点て何がある?
こんどVBAでプログラムくむことになったんだが・・・
注意しないといけないことあったら教えてくれ



2りゅう:02/06/11 09:41
特に関数とかフォームとかについてお願いします。
困ってから聞きにこい。
でなきゃ金払って講習会受けて来い。
4デフォルトの名無しさん:02/06/11 10:07
>>1
師ね
    ∧_∧            ((
   ( ´Д`)            ) )
  /    \          ノ
  | |     | \        ((  ((
  | | /⌒|⌒|ヽ二二つ    )    ) 丿パチパチ
  ヽ二二Ο./      \ (( (   ノノ
  (_| |_| |_       \ ∴∵ ← >>1
    .(__)__)       //》||ヾミ\
Officeのバージョン混在環境は死のかほり。
7りゅう:02/06/11 10:13
>>1よ聞いてくれ
俺には母親と1つ違いの妹がいる。
残念ながら俺の父親は俺が小さいときに愛人を作り蒸発した。
俺は父親の顔は覚えていない。
しかし母親の小さい背中に支えられ、貧乏ながらも幸せな生活を送っていた。
しかし俺が小学校6年の時の誕生日の日に母親は暴走したトラックに惹かれて死んだ。
そして俺と妹は親戚の家に預けられた。
はじめは不安だったが、俺には厳しかった義理父だが、
妹にはやさしく接してくれ俺は本当に安心できた。
しかしそこの義理父が妹の誕生日の日に、俺の前で妹を犯した。
妹がまだ女になる前にだ。
俺は本当に怒りを覚えたが、義理父に逆らうと生活が出来ないため、
泣きじゃくる妹をただ見つめることしか出来なかった。
そして俺は中学生なのに、仕事もしない義理父の変わりに仕事に行かされろくに勉強もできなかった。
そして15歳の時に家を追い出された、このときは残された妹が本当に心配だった。
しかし、妹も1年後に家を逃げてきて、苦しい思いをしていたようだが
2人で笑顔で生活することが出来るようになった。

少年期は非常に苦労したが、それが今心の糧となって貧乏ながら一生懸命生きている。











以上、この話は嘘だ。
9名無しさん@Emacs:02/07/02 02:53
適当なスレがどこか良く分からなかったのですが、とりあえずここで。

(A列の値) * (B列の値)を C列に入れる場合、

for i=0 to 100
Range("C" & i).value = Range("A" & i).value * Range("B" & i).value
next i

ってやると、著しく遅いんですが、何か良い方法は無いでしょうか?
たぶん文字列の結合が余計な処理なんじゃないかとは思うのですが・・・
10デフォルトの名無しさん:02/07/02 03:56
こんなんどう?
ちょっとは早くなりそうな気はするけど。

For i = 1 To 101
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
Next i

実際>>9のと実際に比べてみたけど、>>9もそんなに遅くはなかったってのは付け加えときま。
11デフォルトの名無しさん:02/07/02 04:30
>>9
マクロの記録って知ってる?

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2002/7/2 ユーザー名 : ********
'

'
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
Range("C1").Select
Selection.AutoFill Destination:=Range("C1:C100"), Type:=xlFillDefault
Range("C1:C100").Select
End Sub
12デフォルトの名無しさん:02/07/02 04:48
>>9
スマソ。式じゃなくて計算結果を代入しなければならないのね。
でも式の採用も検討しちくり。
13デフォルトの名無しさん:02/07/02 15:56
excelVBAて役に立つの?
まえにアホ元SE(COBOLER)が自慢してたんだけど。
60歳こえている頭がいかれた爺だからしかたないんだけど。

14デフォルトの名無しさん:02/07/02 16:01
>>13
仕事でバリバリ使っている。俺の仕事は工学系で、結果をすぐにグラフ
にしてカット&トライしながらやっていくのだが、EXCEL VBAは超便利。
速度は遅いけどね。
159:02/07/04 23:36
>9,10
どーもです。10さんのアイデアをいただいて、早い処理をマクロ記録して、
それを改造してコードをくんだらだいぶ速くなりました。
ありがとうございました。
16VBA暦7年:02/07/05 00:09
オブジェクトの参照は著しく遅くなるので一度変数に読み込むべし。
プログラムは基本的に
・読込
・計算
・出力
の3部構成にすべし。これ基本。

Application.ScreenUpdating=False
Dim dblX as Double, dblY as Double, dblZ as Double
'読込
dblX=Cells(1,1).Value
dblY=Cells(2,1).Value
'計算
dblZ=dblX*dblY
'出力
Cells(3,1).Value=dblZ

大量データ処理だとぜんぜん速度違うし、プログラムもスキーリ。
17デフォルトの名無しさん:02/07/05 00:13
本屋で売ってるExcel VBAの本なんか、ほとんどがクズばっかりだ。
半人前のくせして本書くな。
18VBA暦7年:02/07/05 00:15
↑そだね。本当に役に立ったのは大村あつしの1冊しかなかった。
19デフォルトの名無しさん:02/07/05 00:18
>>18
大村あつしでもまだ不足だ。
Microsoft公式の上級者向けでないと。
いいんだよ、どうせ素人向けなんだから。
21デフォルトの名無しさん:02/07/05 00:21
クラスをまともに扱った本って見たことないな。
大体がチャートオブジェクトでイベント拾いたいとかで
呪文みたいにサンプルリスト出してあるだけ。
22VBA暦7年:02/07/05 00:21
>>19
読んだことなかったです。今度読んでみよっと。
23デフォルトの名無しさん:02/07/05 00:25
漏れはexcelVBAでwin32api呼び出して、グラフィック表示させるプログラムを作らされました。
もうむちゃくちゃ。
24VBA暦7年:02/07/05 00:25
速度向上のポイントとしては
・Application.ScreenUpdating
・Application.Calculation
・Cellを極力参照しない
くらいかな。
25デフォルトの名無しさん:02/07/05 00:31
遅くてもええやん。
どうせ金になるスキルじゃないんだから。
26デフォルトの名無しさん:02/07/05 00:38
>>25の言っている意味がわからない
Excelの仕事って、確かに金額だけ見てると安いけど、うまくやると利益率高いの多いね.
ぽっと出の案件ばっかで継続性が無いのがアレだけど。
セルへの大量データの貼り付けは
クリップボードを使うと速いよ

昔はクリップボードって32kの制限があったのだが・・・
今はもう無いのかな。

あぁ、DDEの方が速いよ・・・ふぅ。
30VBA暦7年:02/07/06 00:39
>>1
97と2000でドロップダウンコンボ(だったっけ?)コントロールの仕様がビミョーに異なっていたと思ふ。
ユーザーフォームの動作確認は厳重にしる。
あと、WorkSheetをMoveするとオブジェクト変数がオブジェクトを見失うというバグらしきものが2000にはあった。sp2あたりで治ったかな。
31VBA暦7年:02/07/06 00:47
>>27
たしかに継続性がない。仕様書がない。予算がない。
Excelの仕事ってワークグループ向けで、エンタープライズ向けではないからお金にはならない。
ニッチなお仕事ね。
32デフォルトの名無しさん:02/07/12 09:11
誰かExcel2002のスタッフロールの出し方を知りませんか?
3332:02/07/12 17:36
みんなVBAとか語ってはいるものの、EXCEL20002のスタッフロールを出す方法
知ってるような人はいないのかな?
(EXCEL2000はすでに知ってるから・・・2002の方法を教えて下さい)
34デフォルト名無しさん:02/07/12 18:00
保険会社で新商品を開発したりする場合に滅茶苦茶使うよ、EXCELVBA。
アクチュアリーの必需品。
35 :02/07/18 11:07
みんなVBAとか語ってはいるものの、EXCEL20002のスタッフロールを出す方法
知ってるような人はいないのかな?
(EXCEL2000はすでに知ってるから・・・2002の方法を教えて下さい)
36ななし:02/07/19 00:28
>>29
Accessのデータシートビューの数1000〜1万件のオーダーのレコードがメモリ不足にも
ならずにコピペできるのだから、32Kが上限であるはずがない。
37デフォルトの名無しさん:02/07/19 10:51
すんません。excel初心者です。
excelのVBAからexe形式の他の実行ファイルを
呼び出す方法を教えてください。
>37
Shell関数をちぇけらっ
39デフォルトの名無しさん:02/07/19 12:32
ありがとうです。
できれば、非同期でなく同期で、
アプリからの戻り値を取得したいのです。
>>39
API使ってもできるけど、VBAからwshを呼び出すという手もある

Set WShell = CreateObject("WScript.Shell")
rc = WShell.Run("notepad", , True) '第3引数がtrueなら同期
41 :41 :Over 40 Thread
このスレッドは40を超えました。
もう書けないけど、新しいスレッドは立てないでくださいです。。。
42デフォルトの名無しさん:02/07/21 00:30
エクセルVBAでローカルIPアドレス取得する方法ってあります?
ちょっと困ってます。誰か教えて。
43デフォルトの名無しさん:02/07/22 00:36
age
>>41

Private Declare Sub vbMemMove1 Lib "kernel32" Alias "RtlMoveMemory" (dst As Any, ByVal src As Long, ByVal num As Long)
Private Declare Sub vbMemMove2 Lib "kernel32" Alias "RtlMoveMemory" (dst As Long, ByVal src As Long, ByVal num As Long)

Private Declare Function gethostname Lib "wsock32.dll" (ByVal Name As String, ByVal namelen As Long) As Long
Private Declare Function gethostbyname Lib "wsock32.dll" (ByVal Name As String) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequested As Integer, lpWSAData As Any) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Integer

' IPアドレスを取得
Public Function GetIpAddress() As String
Dim wsa As WSADATA
Dim sName As String * 65
Dim he As hostent
Dim p As Long
Dim b(3) As Byte

If WSAStartup(&H101, wsa) <> 0 Then Exit Function

If gethostname(sName, 64) = 0 Then
p = gethostbyname(sName)
If p <> 0 Then
vbMemMove1 he, p, 16
vbMemMove2 p, he.h_addr_list, 4
vbMemMove1 b(0), p, 4
GetIpAddress = b(0) & "." & b(1) & "." & b(2) & "." & b(3)
End If
End If

WSACleanup
End Function
45デフォルトの名無しさん:02/07/22 02:07
EXCELVBAで組むと簡単なマスタデータとかはワークシートに持てるし
EXCEL入ってればどこでも開発できるからツールとか、VBアプリのプロト
とか作るのに重宝する。
ただし、エンドユーザにリリースしちゃうのは、勝手にEXCELバージョン
アップされちゃったりするのでちょっと慎重になる。

>42

shell関数でipconfig.exe /batch temp.txtで出力するか
40みたいにWSH使って標準出力から拾って、その後IPアドレス
だけ切り出すがよろし。
46bigpapa:02/07/22 02:13

■ 全国の愛すべき諸君へ 沖縄より愛を込めてbigpapaより

★ 2ちゃんねるの管理人に賠償と書き込みの削除を命令 東京地裁 
------------------------------------------------------------ 
 インターネット上の人気サイト「2ちゃんねる」の掲示板をめぐり、
東京都内の動物病院が「書き込みで中傷された」として東京地裁は26日、
400万円の支払いと書き込みの削除を命じた。

管理人は「不当な判決だ。賠償額についても不満があり、控訴する予定」
と話している。[毎日新聞6月26日
 

■ 東京地裁の判決の詳しい結果は下記のURLをご覧ください。
http://www1.ryucom.ne.jp/papa/newpage2chsaiban.htm

■ アスキーアート(AA)の定義JISアートの定義は下記URLへ
http://www1.ryucom.ne.jp/papa/asciiart.htm
47デフォルトの名無しさん:02/08/02 20:38
Excel VBA 厨房です。

エラー処理にひっかかったら Excel を落とすってことで、Application.Quit
を使ってるんですけど、Application.Quit 以下の文が実行されてしまいます。

Application.Quit って C で言う exit() みたいな使い方できないんですか?
Application.Quit 以下の文が実行されてしまいます。
がよくわからんが、
ビジネスsoft板逝ったほうがいいと思うぞ。
>>48
ビジネスソフト板っすか。さんくすこ。
50デフォルトの名無しさん:02/08/12 18:05
次のバージョンはC#ですか?
51デフォルトの名無しさん:02/08/12 23:28
エクセルからXML吐き出すのに、これはいいってのあるかい?
52デフォルトの名無しさん:02/08/12 23:30
フツーに出してるのXMLもどきじゃなかったっけ?
53デフォルトの名無しさん:02/08/17 19:25
EXCEL20002のスタッフロールを出す方法教えてください
54デフォルトの名無しさん:02/08/25 22:15
>>9
もう見てないとは思うが。
16よ、知ってたらちゃんと教えろよ。

Sub Sample1()
Dim a
Dim b() As Double
Dim i As Long
With Range("A1:A100")
a = .Resize(, 2).Value
ReDim b(1 To UBound(a), 0)
For i = 1 To UBound(a)
b(i, 0) = a(i, 1) * a(i, 2)
Next
.Offset(, 2).Value = b
End With
End Sub

Sub Sample2()
With Range("A1:A100")
.Copy Range("c1")
.Offset(, 1).Copy
.Offset(, 2).PasteSpecial Operation:=xlMultiply
End With
Application.CutCopyMode = False
End Sub

5554:02/08/25 22:17
スマソ、上はインデントが入ってない。
5654:02/08/25 22:21
笑われる前に訂正。
Sub Sample2()
With Range("A1:A100")
.Copy .Offset(,2)
.Offset(, 1).Copy
.Offset(, 2).PasteSpecial Operation:=xlMultiply
End With
Application.CutCopyMode = False
End Sub

>>54
(^Д^)ギャハハ!!
58初心者:02/08/28 13:59
アプリケーションからのメッセージを無視してそのまま動作させる方法を教えてください。
例えばエクセルで、

ActiveWindow.SelectedSheets.Delete

とやってシートを削除するときに、
「もとに戻せないよ」って警告がでますよね?

これを無視したいのですが。
>>58
Application.DisplayAlerts = False
6058:02/08/28 15:50
>>59 やってみます。どもでした。
61デフォルトの名無しさん:02/08/30 17:17
excelのVBAで矢印(shape)を描画する時の座標系はポイントですけど、
この座標系ってセルの罫線の太さによって微妙にセルの位置とずれますよね。
cellとshapeの位置をきっちり対応させる方法ってあるのでしょうか?

62デフォルトの名無しさん:02/08/30 18:08
61>>
rangeで選んでheightでポイントをゲット
(すいません自己レスでした)
63デフォルトの名無しさん:02/08/30 18:14
アクセルのVBAでどれくらいのプログラムが組めますか?
>63
メモリの許す限り
65蛇足:02/08/31 13:12
>58
その後Trueにしときや。いちおー。

Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
66デフォルトの名無しさん:02/08/31 19:52
>>63
アクセルって何?
67デフォルトの名無しさん:02/08/31 22:31
セルをクリックするとValueに○が入る仕掛けを実装したいのですが、
セルを左シングルクリックしたときだけイベントを起こすには、
どうしたらいいのでしょうか? ワークシート上での右クリックや
ダブルクリックのイベントはすぐ見つかりましたが、ただの
クリックとキーボードイベントだけが見当たらなくて、非常に
困っています。
68デフォルトの名無しさん:02/08/31 22:39
オセロか囲碁でもつくるのかい?
6967:02/08/31 22:52
>>68
とある地学系観測データシート作成システムの構築です。お客さん
からは「左クリックで○を入れ、右クリックで消去」さらに「範囲
選択後、左クリックで選択範囲を全て○に、右クリックで全消去」
と申し渡されていますが、上記問題がボトルネックになって、
ちっとも作業が進まないんです・・・。
70デフォルトの名無しさん:02/08/31 23:38
>>69
SelectionChangeとかじゃだめ?
71 :02/08/31 23:42
>>66
63が開発した有名なソフトだ。静かに見届けてやれ......。
ひそかにアクセルつーのは2ch用語かと思っていた俺・・・。
7367:02/08/31 23:47
>>70
SelectionChangeをそのまま使うと、キーボードでカーソル移動
しただけで○が書き込まれてしまいます。というか、誤植の原因に
なるから何とかしてくれとお客さんにお叱りを受けました。
74 :02/08/31 23:52
CTRL押しながらクリックしたら...とか譲歩案にもってけよ!
75デフォルトの名無しさん :02/08/31 23:54
つーか、これくらい自分で出来ない客はクソだな
76デフォルトの名無しさん:02/09/01 00:03
>>73
そしたら、WinAPIロードして、マウスクリックイベント捕まえたら?
ここにも記入させていただきます。

CommandBarに以下のようにして、
CommandBarComboBoxを追加しました。

Dim CB As CommandBar
Dim CBCtrl As CommandBarControl

Set CB = Application.CommandBars("Worksheet Menu Bar")
Set CBCtrl
= CB.Controls("挿入(I)").Controls("一括挿入").Controls.Add(Type:=msoCo
ntrolEdit)

With CBCtrl
.Caption = "挿入縦サイズの設定"
End With

このとき、Type:=msoControlEditですので、
記入欄に文字をかきこむことができます。

その文字をプログラムにうけわたすには?
また、記入欄に初期値をかきこんでおくには?
また、記入欄の文字を変更した場合、初期値をそれに変更するには?

どうかご教授ください。
78デフォルトの名無しさん:02/09/03 09:28
>>78=原始人
79デフォルトの名無しさん:02/09/03 15:59
ちょっといい話し。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
あちこちから悲鳴が聞こえる泣き叫ぶ子供。瓦礫と化した家に押しつぶされる日本人。
「助けて…」という声が絶え間なく聞こえている。しかし被災した神戸の住民は、放心
したように黙って座り込んでいるだけだ。あまりのショックに下敷きになっている人を
助けることさえ忘れているのだ。
「今助けるけん。まっとんしゃい!」
こう叫んだのは共に住民として神戸に住む在日韓国人達だった。自分も血を流し怪我を
しているにも関わらず救助活動を続けた。
「ぜったい助けるけん。がんばっとー!」こうして懸命な救助活動の末助け出された人
達は1万人以上にものぼる。助けられた中学生の女の子は「在日韓国人の人がいなかっ
たら間違いなく死んでいた」と涙を流した。村山首相を始め救助活動の遅れが多くの助
けられる人たちの命を奪った。「助けるのは当たり前けん! 私ら同じ住民やもん!」
オモニ達は目に涙を浮かべていた。
80デフォルトの名無しさん:02/09/03 18:47
>>79
いい話しだなぁ〜
81デフォルトの名無しさん:02/09/03 22:13
戦時中にレイプ事件など女子供を痛めつける事件が起きると、警察が動き
出す前に先立って調べに動いたのは在日韓国人だったと言う。

それも大半がヤクザと言われる人達であって、彼らは確かに日常的には
非難の目で見られているかもしれないが、しかしまた一番勇気のある人達
でもあったのである。
???
いきなりここはニュー速か極東にワープしたのれすか?
83デフォルトの名無しさん :02/09/04 02:27
>>77
.Textじゃだめ?
84デフォルトの名無しさん:02/09/05 11:27
フォームにRefEditコントロールを使うと、動作がおかしくなります。
具体的には、セルの参照後、元のフォームに戻っても、操作を受け
付けなくなります。RefEditが縮小されないようです。

MSのサポート情報(Excel97に似た現象があるらしいです。)やGoogle
で検索しても情報がなくて・・・

環境はWin2000SP3 Excel2002SP2です。ご指導お願いします。
85デフォルトの名無しさん:02/09/07 23:20
低レベルで申し訳ないんですが質問させてください。
ある列を基準に集計したいのですが可能でしょうか?
たとえば
 商品  金額    商品  金額  
 A    100    A    300
 A    200  ⇒ B    700
 B    300
 B    400
のように。

よろしくお願いします。
86デフォルトの名無しさん:02/09/07 23:35
>>85
簡単
87デフォルトの名無しさん:02/09/08 03:59
>>85
プログラムレスに行うにはデータ→集計。
>>87
ム板的には、あえてVBAプロシージャを組んでみせるとか。駄目?
Range("XX:XX").Select
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True

とかね。それともCellsプロパティを使って配列のように計算するか。
Excelマクロについての質問はこちらで良いのでしょうか?

グラフのデータのX軸を変更したいのですが
ActiveSeet.ChartObjects("グラフ 1").Activate
ActiveChart.SeriesCollection(1).XValues = "シート1!R2C1:R2C1"
でエラーが発生したりしなかったりします。
エラー内容は「SeriesクラスのXValuesプロパティを設定できません。」
です。
原因がわかりません。教えて下さい。
よろしくお願いします。
91デフォルトの名無しさん:02/09/10 23:19
>>86>>89
皆さんありがとうございます。
データ→集計をプロシージャで書くと(手動でも)
行の左にエクスプローラのツリーのようなものが出てしまいますよね。
できれば出したくないんですが、そうなると「おとなしくAccess使え」
って事になるんですよね・・・。
でも参考になりました。ありがとうございます。
92デフォルトの名無しさん:02/09/10 23:53
今、このような競馬の集計表を作っています。
http://eucaly.net/monazilla_uploader/1031668628_EX.png

この表の「複勝圏OK」、「複勝圏NO」に回数を返す関数を教えて
下さい。
「次走」「2走」「3走」の項目の下にある数字が着順です。
「○」昇級戦での順位、「▲」は降級戦での順位です。

*○や▲を取り除いてIF関数の後に<4と入れば済む事ですが
どうしてもそれもカウントしたいのです。
よろしくお願いします。

複勝圏=3着以内です
93デフォルトの名無しさん:02/09/20 00:22
超初歩的な質問ですみません・・。
コマンドボタンを押すと、アクティブになっているセルの
場所(仮にA1)を返してテキストボックスに"A1"を表示するには
どうしたらいいでしょうか・・。

値の参照は簡単ですが、場所???壁にぶち当たり・・。

ご存知の方いらっしゃいましたらよろしくお願いします。
>>93
コントロールのボタンを貼り付け、TakeFocusOnClickプロパティをfalseに
設定する。

テキストボックスを一つ貼り付ける。

コードに次のようなものを記入する。(関数名、ワークシート名やテキスト
ボックス名は適宜変更の事)

Private Sub CommandButton1_Click()
Worksheets("Sheet1").TextBox1 = ActiveCell.Address
End Sub

デザインモードを抜け、ボタンを押すと、テキストボックスにアクティブセル
のアドレスが表示されるはずです。
9593:02/09/20 12:10
>94
教えていただいてありがとうございました。
おかげさまでサクッと作業が進みました。
本当に助かりましたー!
96デフォルトの名無しさん:02/09/21 10:03
>>58 と似てるけどちょっと困ってます。
VC6.0++&MFC、#importを使って作成したEXEによってシートを削除すると
Excel95が入った環境では確認ダイアログを消せません。
95VBAヘルプのDisplayAlertsの項では「外部から使った場合は効果がありません」
って書いているのですが、どうにかしてこのダイアログを消す方法はないでしょうか?

最悪、シートを削除するだけの関数を保存したExcelファイルを別に用意しておき
実行環境がExcel95だった場合に限りApplication.Runでそれを呼び出して
削除しようかと考えてます。(この方法ではダイアログが出ないことを確認しました)
97Delフサギコ ◆VzDeLphI :02/09/23 21:45
  ∧,,∧  よろしくお願いします。
 ミ,,゚Д゚彡

VBAで
Public Function AAA() as date
と関数を作ってDate型で
セル値を[=AAA]
として値を表示させているのですが
こうしたときに、時にはセルを空白にしたい時があります。

でも、AAAをnullでもどしたりすると
#Valueだかなんだかの値がセルに出てしまい
エラーっぽくなってしまっています。

これをどうにか消すようなことはできないでしょうか。

ヨロシコです。
98デフォルトの名無しさん:02/09/24 00:07
>>97
=iif(AAA=Null,"",AAA)
とか。
99Delフサギコ ◆VzDeLphI :02/09/24 00:31
  ∧,,∧  Excelのセル入力じゃなくて
 ミ,,゚Д゚彡
      VBAのFunction上で消したいのです。
      むりかしら。
Dateで返そうとするから無理なんじゃ?
ところでDelスレ以外での発言はそのコテハン止めてくれない?
>>100
まぁ、そういわんでもいいんじゃない?
叩かれる可能性の高いコテハンで頑張ってる
奴の唯一の(?)特権が、以前に何か教えてもらった
奴がお礼に教えてくれるかもしれないわけだし。

>>ギコ
試したわけじゃないけど、値がNULLだったら、
Nothingに変えてしまうとどうなるかな?
102Delフサギコ ◆VzDeLphI :02/09/25 01:29

    l||l∧,,∧       / ̄ぢつは ̄ ̄ ̄ ̄ ̄ ̄ ̄
     .ミ,,   彡    <  ツっクを受けてたりしまつ....
     ∪ _ミ /  ̄ ̄ ̄/\___________
     (ミ,,,|\ ./ L e t s/
       '\/.======./
           ̄ ̄ ̄ 
103デフォルトの名無しさん:02/09/25 19:01
適当なスレがなかったので、ここに質問させて頂きます。

印刷タイトルと同じように、
各ページの一番最後の行に金額の小計を出したいのですが、
何かいい方法があったら教えて頂けないでしょうか?
>>103
フッタに設定すれば?(毎ページごとに)
105 :02/09/26 18:23
VBのコントロールにあるIndexみたいなのが Excelには 見当たらないんですけど、
複数のコントロールを順番に操作したりできないでしょうか?

106103:02/09/26 18:49
>>104
フッターに設定してもいいんですが、
エクセルのフッターには、関数って使えませんよねぇ。。。

アクセスなら使えるんですが・・・。
107デフォルトの名無しさん:02/09/26 19:43
EXCELで「支店名を入力したら該当する支店の電話番号」が出てくる
マクロを組んだんだが、うまくいかない。
支店が全部で100あったとして、データシートに100の支店を
記入していたらどうってことないんだけど、
管理上データシートを複数に分けたい。
四国のデータシート、関東のデータシート・・・といった具合に。
データシートを複数設けて、ユーザーが電話番号を入れるだけでそれらの
データシートをまたがって検索するようには出来ないのでしょうか?
どういう記述が必要なのかがわかりません。
仕様上無理??
>>107
1.隠しシートに全部のデータをコピーしてから処理
2.ブックが別じゃないなら全てのシートオブジェクトからデータを取得
 (VBA内で必要なシートだけにしてもいいけど)
3.ブックが別だったら面倒だからやめとけ
>>107
DATAsheet = SheetsALL
OUTsheet = "出力フォーム"

で出来ないのか?
試せる環境がないからわからんが。
これが出来ないというのは普通考えられないんだが、どうなんだろ
110デフォルトの名無しさん:02/09/26 21:48
>>109
エクセルで全シートを参照しての検索マクロは過去にやったことあるけど無理っぽい。
あきらめて一つのデータシートにぶち込むしかないね
>>110
そうなの?
試してないけど、
シート1を検索して無かったら、
シート2を検索って出来ないのかな?
112デフォルトの名無しさん:02/09/26 21:58
お前らVBAするのもいいが、それ以前にExcelそのものの機能を限界まで知り尽くす
ことも重要だぞ。無駄なVBAをしないためにも、本当にVBAを生かしきるためにもな。
オフィシャルマニュアルで学習するのがいいだろう。
>>107
For Each 〜 In 〜
Next
を御存知か?

============================
SerchSheetName = "なんでJAVAにはunsignedがないんだ!!"
For Each Sheet In Worksheets
If SerchSheetName = Sheet.Name Then
' 検索対象シートがあった場合文字列をぶちこむ
Sheet.Cells.Item(1, 1) = "重すぎるぞJAVAは!"
End If
Next
============================

で全シートに対して検索なり破壊工作なりできますが。
114 :02/09/27 10:29
>>112
限界まで知らなくてもいいから
テキトーにプラグラムして ちゃんと動いて欲しいのが本音(w
>113
>"なんでJAVAにはunsignedがないんだ!!"

スレ違いだけど俺もそれで苦しんだ・・・
C言語のライブラリをJavaに移行するとき。
116 :02/09/30 10:06
Sheet1.Range("A1").Select
With Selection.Interior
.ColorIndex = RGB(255,128,192)
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
これと
Sheet1.Range("A1").Select
With Selection.Interior
.ColorIndex = RGB(255,128,255)
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
これが 同じ色に表示されるんだけど、設定が変なんでしょうか?
117 :02/09/30 10:10
.ColorIndex じゃなくて .Colorだな。
でも、色は同じみたいだが。
118☆」:02/09/30 13:21
>>116


>>117の事もふまえて”RGB”からお勉強してください。
あるディレクトリ内の全CSVファイルを走査し、

45行目の23列目の値を新ファイルの1行目に
45行目の27列目の値を新ファイルの2行目に
45行目の?列目の値を新ファイルの3行目に
45行目の?列目の値を新ファイルの4行目に
  ・
  ・
  ・
という作業をして、値を抽出した
レポートファイルを作りたいです。

エクセルに頼るのではなく、
シェルとawkでやりたい。
でも、ディレクトリのグロビング等が絡むと
perlでやった方がいいのでしょーか。

121 :02/10/01 14:58
>>119

RGBの何を勉強しろってんだ。
勉強する内容をココに書け!
そして、そのマクロを実行して、その結果、どうしてそうなるのか
述べてみろ。
>>120
エクセルもVBAも使わないなら、すれ違いでは?
123120 :02/10/01 15:49
あ、すいません。120です。間違って書き込んでしまいました。
先ほど、某スレから120にレスが付いていたawkのスクリプトを見かけたのですが、
さっぱり判りませんでしたので、excellのVBAではどのようにするのかな、
と思って、質問しようと思って間違ってカキコしてしまったようです。

私は上と似たような情況で、ディレクトリにCSVファイルが沢山あり、
それをxlsファイルの一つのシートに書き込んでいきたいと思っています。
例えば、20行10列のcsvファイルがディレクトリに沢山あって、VBAでグロビング
してどんどん開いていき、例えば3行5列の値なんかをシートにどんどん書き出していくには
どのようにすればいいでしょうか?
124初心者:02/10/01 16:09
ゲームのフリーセル32000通りを全部制覇するべく挑戦しており、
エクセルでフリーセルの番号の管理をしたいです。
解き終わった番号のセルを自動でチェックし、
新規ゲーム時に、未済の番号からランダムに出せるようにする。
解けない番号はパス(保留)して、また未解決の番号の中に戻す。
達成率をグラフで表せてもいいなと思ってます。

いわば「フリーセル32000本ノック」みたいなものを作りたいのです。
他のアプリが関わる場合でもVBAでマクロを組む事は可能でしょうか。
125デフォルトの名無しさん:02/10/01 17:18
どうでもいいがVBAをマクロというのはやめろ。
意味が違う。
126 :02/10/01 17:36
VBAは 真黒という(謎)
127 :02/10/02 14:06
複数のセルを選択している状態は、どのようにして知ることが できるのでしょうか?
>>127
言ってる意味がわからないので適当です。

Sub aaa()

Dim i As Long

Range("A1,C5,D7").Select
For i = 1 To Selection.Areas.Count
MsgBox "数" & i & Chr(13) & "アドレス" & Selection.Areas(i).Address
Next i

End Sub
129デフォルトの名無しさん:02/10/09 23:34
Shell "ping **.**.**.** -n 1"
とやると、DOSのコンソールに結果が出力されますが、この結果を
シート(セル)に読み込みたいのですが、どうしたら良いのでしょうか
>>129 無理
131129:02/10/10 00:06
>>130
えっ...そうなんですか、てっきり出来るもんだとばかり...
以外な結末にちょっと唖然としてます
132デフォルトの名無しさん:02/10/10 00:53
エクセルのVBAでActiveXを作りたいのですがどうすれば作れるのでしょうか?
教えてください。
>>130
いや、できるって。
とりあえず、糞みたいな方法だと、
Shell "ping **.**.**.** -n 1"   > *****
ってやって
テキストにして読み込むなんてすればいいんでないの?
たぶん、他にも方法があると思うけど眠いから寝る。
134133:02/10/10 02:30
すこし起きれたのでサンプル (いいかげんですまん)

Sub ボタン1_Click()

Shell "command.com /c ping **.**.**.** > C:\@aaa.txt"
strFileName = "C:\@aaa.txt"
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFile = objFileSystem.OpenTextFile(strFileName)
Do Until objFile.AtEndOfStream
strecBuff = objFile.ReadLine
i = i + 1
Cells(i, 1).Value = strecBuff
Loop
objFile.Close

End Sub

>>130
    ∩__∩
くまの( ´,_ゝ`)プッさん
136129:02/10/10 09:11
>>134
resありがとうございます
私もリダイレクトしてファイルに落とすという方法は思いついたんですが
Shell "ping **.**.**.** > C:\@aaa.txt"
とすると、なぜかリダイレクトされなかったんですよ
"command.com /c"を付ければ良かったんですね..出来ました(^_^;)
137デフォルトの名無しさん:02/10/10 10:30
シートにはりつけた コンポボックスにフォーカスを移したいんですが、どのようにすればいいのでしょうか?
138笑ってください:02/10/10 16:25
VBAで1行目から10行目を選択するのは
Rows("1:10").Select
ですが
1行めをX(変数)にしたい時はどうなるのか教えてください。
区切り方が分かりません。
どなたかお願いします。
139デフォルトの名無しさん:02/10/10 16:30
Rows(x & ":10").Select
140笑ってください:02/10/10 16:49
>>139
動きました。
本当にありがとうございますm(__)m
141129:02/10/11 14:26
コマンドボタンの Caption なんですが、2行以上に分けて表示することは
可能でしょうか?
ハァ。
CommandButton1.Caption = "1行目" & vbCrLf & "2行目"
143129:02/10/11 15:12
>>142
プロパティからは出来ないって事でしょうか?
144129:02/10/11 16:34
>CommandButton1.Caption = "1行目" & vbCrLf & "2行目"
で、変更したCaptionを見ると"1行目・・2行目"と表示されます
それで、試しに一度消して、"1行目・・2行目"と入れると...
駄目でした(*_*)
やっぱりVBAからでないと出来ないみたいですね
145デフォルトの名無しさん:02/10/11 16:40
シートに貼り付けたコマンドボタンの位置が、どんなに スクロールさせても
常に 表示させてる状態にするには どのようにしたらいいのでしょうか?

146デフォルトの名無しさん:02/10/11 17:07
シートをスクロールさせた時に 発生するイベントってありますか?
147デフォルトの名無しさん:02/10/11 17:43
Workbook_BeforeCloseのイベントで
ThisWorkbook.Saved = True
って やってるんだけど、保存しますか? ときいてきます。

右上の×で クローズさせる時に、 ThisWorkbook.Saved = True
ってのは できないんでしょうか?
>>147
ブックが他に開いていた
ってオチじゃないの?
(´・ω・`)ショボーン
150デフォルトの名無しさん:02/10/15 22:07
シートにテキストボックスやオプションボタンを貼り付けたのですが、
Tabキーを押しても次のテキストボックス等に移動してくれません。
対処方法を教えて?

もうひとつ。
CommandButton1.Value = ""
      ・
      ・
CommandButton10.Value = ""
を変数iとFor文で記述することはできないのでしょうか?

151デフォルトの名無しさん:02/10/15 22:09
おまいら、結構やさしーんだな.........
152デフォルトの名無しさん:02/10/15 22:24
バグってるVBA使うよりVBからアタッチした方が
話早くない?
153デフォルトの名無しさん:02/10/16 00:33
>>150
コレクション使え。
154デフォルトの名無しさん:02/10/16 07:33
ESCキーによる処理の中断を無効化したいです。

BrowseForFolder関数でもAPIのSHBrowseForFolder関数でもいいのですが、
フォルダを参照するダイアログを出すマクロの話です。

フォルダの参照ダイアログが出ている間にESCキーを押すと
処理が中断してデバッグ画面(VBAエディタ)になってしまいます。
On Errorでは引っかかってくれないので、ダイアログを出す直前で
「Application.EnableCancelKey = xlDisabled」をしています。

しかしダイアログを出す前後は処理が中断しないのですが、
その後の処理(違うサブルーチン)で処理の中断になってしまうのです。

ttp://www.projecta.co.jp/mybooks/book05-3.htm
上のページの一番下から2番目が答えっぽいけど・・・
155デフォルトの名無しさん:02/10/16 11:19
こんなところで きいても反応少ないよなぁ。
やっぱし ココか。
http://www.ae.wakwak.com/cgi-bin/sbox/~efc21/wwwlng.cgi
156129:02/10/21 14:22
ShellでPINGを打つという件ですが、クライアントが10〜20台位有る等から
PINGのBATを生成して、それをshellで起動する事にしました

この場合、batが終了するまで5〜10秒位掛かります
しかし、shellでbatを起動すると、batが終わる前に次の命令が実行されてしまいます
次の命令は、batで生成されたはずのファイルを読み込む命令なので、batが終わるまで
待つ必要があります
今のところ(プロトタイプでは)20秒のweitを入れてうまく動いているんですが
今後、実用段階になった場合、いろいろな環境で使われる可能性があり、20秒では
十分でない可能性があります

そこで、質問なんですが、
shellで起動したプログラムが終了したかどうかをチェックする方法は無いでしょうか?
157デフォルトの名無しさん:02/10/21 15:10
>>156
そんなこと Excel VBAでは できません(w
>>156
Win32APIを使わなくても可能
  CreateObject("WScript.Shell").Run "c:\path\hoge.bat", , True
160129:02/10/21 16:22
>>158
ありがとうございました、出来ました
ひとつ気になった事があるんですが、
 Private Declare Function OpenProcess Lib "kernel32"......
は、たぶん"kernel32"というライブラリーを読み込んでいるんじゃないかと思われるんですが
たまたま私の環境(win-nt/excel2000)ではそのまま実行できたんですが、excel97等でも
実行できるんでしょうか?
できる。
162129:02/10/21 16:36
>>159
158さんの方法を試している間に書き込んでいただいたようで、ありがとうございます
これでも出来ました、簡単でいいですね(^_^)
"WScript.Shell"って実行環境について制限は有りますか?

>>161
ありがとうございました
> "WScript.Shell"って実行環境について制限は有りますか?

・Excelのバージョンが2000以降
・OSがWin98/2000以降
・IEのバージョンが5.0以降
・WSHを自分でインストールした環境
上の条件のうち、いずれか1つでも満たしている環境なら動くはず。

でも、環境を気にせず確実に動かしたいならAPIの方がおすすめ。
164129:02/10/21 17:04
>>163

>・IEのバージョンが5.0以降

これでクリア出来そうです、私の知る限り IE5.01 以上が入っているはずなんで
ありがとうございました
165デフォルトの名無しさん:02/10/22 20:32
エクセルでセルに半角文字が入力されたらまずいので
それをチェックする関数を作成したいのですが、
方法が思いつきません。
Asc()を駆使すればいけるような想像もしているのですが、
非常に効率が悪く思えます。
いい方法あれば教えていただけませんか?
よろしくお願いします。
>165
半角 VBA 判断
ググレ
167165:02/10/22 23:12
>164
なるほど、StrConvで変換してみて
戻り値で元の文字列と比較してみて
変換されてたら半角文字列だったってことですね。
なるほど。
目的が変換じゃなくて「チェック」だったので
気付きませんでした。
ありがとうございました。
168166:02/10/22 23:26
いや、俺もためになった。。。
フツーに出してるのXMLもどきじゃなかったっけ?
いいんだよ、どうせ素人向けなんだから。
>>169=170
意味不明の自作自演
VBAは 真黒という(謎)
173デフォルトの名無しさん:02/10/31 00:15
VBAからdll呼び出せるでしょうか。
できるなら方法を教えてください。
>>173
WinAPIのLoadLibrary
(やったことないからしらんけど)
>>174
WinAPI自体がDLL
176デフォルトの名無しさん:02/10/31 11:53
>>173
VBAのヘルプでDeclareステートメントを調べてみる
VB Declare でぐぐる
177デフォルトの名無しさん:02/10/31 19:31
inputboxで入力した文字列を記録してファイルに出力するにはどうすれば?
できればそのScriptと同じ場所に出力したい。
>>177
ファイルを出力するなら
OPEN
WRITE #
PRINT #
CLOSE
この辺りだが、Scriptと同じ場所というのが理解出来ない。
Excelファイルの場所なら CurDir で取れるけど。
おまいら、結構やさしーんだな.........
180デフォルトの名無しさん:02/11/05 19:08

             ∩
                 | |
                 | |
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ;´Д`)//  < 先生!素人以下の知識しかないプロが居まつ!
      /       /     \___________________
     / /|    /
  __| | .|    |
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

181デフォルトの名無しさん:02/11/05 20:30
VBAって2002でもまだ生きてんの? VBAは.NETはないのか?

             ∩
                 | |
                 | |
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ;´Д`)//  < 先生!俺はC++のプロなんでVBAは素人なんです。
      /       /     \_____________________
     / /|    /
  __| | .|    |
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
>>181
M$が作る限りVBAは無くならないと思われ。
>1
VBAはでかいのを作ると動きが不安定になることかなー。

出力のみEXCELと割り切って入力とロジック(?)は別ので組んだほうがいいぞ。
185ケン:02/11/07 12:50
教えてください。
setfocus.textbox1と命令しているのに、フォーカスされません。
どうしてでしょうか?
’-------------------------------
Private Sub TextBox1_Change()


MsgBox (TextBox1)
TextBox1.SetFocus



End Sub
’------------------
文字がテキストボックスに入力されるたびに、Msgboxでそれを
表示し、またテキストボックスに入力していくというようにしたいのですが
これだと、フォーカスされないので、次の文字がにゅうりょくできないのです。
ちなみに、プロパティーは初期のままです。

>>185
MsgBox が表示されている間は、そのコードはMsgBox (TextBox1)の所で
止まっています。SetFocusまで実行されていません。
意図のことをしたい場合、MsgBoxでは無く、新しく別にフォームを作って
そのフォームをモードレスで表示する必要があります

Private Sub TextBox1_Change()
  If UserForm2.Visible = False Then
    UserForm2.Show vbModeless
  End If
  UserForm2.Label1 = TextBox1
End Sub
こんな感じ。

この場合、全てのフォームがモーダレスになっている必要がありますが。
#フォームのプロパティがShowModal=Flase

まぁ、あんまり良い設計じゃ無いですね。他の方法を考えた方が良いでしょう。
187デフォルトの名無しさん:02/11/07 20:12
イベントを追加することって出来ますか?
たとえばワークシートオブジェクトにはMouseMoveイベントがないので、
MouseMoveイベントを追加するとか。
VBAはVSAになります。将来はC#でも使えるようになるらしいよ。
189ケン:02/11/08 12:31
>>186
ありがとうございます。おかげで思い通りの処理を
させることができました。
>>188 はいはい。情報のソースを書いてね。
191デフォルトの名無しさん:02/11/08 21:14
VSAって情報少なくてよくわかんないんだけど、なんなんだろう?
.NETの時もそうだったんだが、MSの新しい戦略の発表って
いつも抽象的でよく理解できないんだよな。
最近は実例もいっぱい出てきたので、.NETが何を言いたいかやっと
わかってきた所なんだが・・・
俺が頭堅いからか?

でも、VBA=VSAというのは違うと思う・・・
192VBAは好きだがVBは使わなくなった:02/11/09 02:12
すみません。単純な質問なのですが、メモ帳などテキストエディタで、
aaa[LF]   
bbb
などと2行書いてコピー、ExcelのA1セルをSelectして貼り付けすると、
A1とA2のセル(2行)にそれぞれ、aaaとbbbが入ります。

それをVBAのCodeでやろうとして、
dim S as String
S = "aaa" & chr(10) & "bbb"
とここまで書いて、ハタと困ってしまいました。
cells(1,1).Value = Sとすると、A1セルのみに書き込まれ、A2セルには何も
入りません。(Altキーを押して、1セル内強制改行状態)

クリップボードに、Sの内容を送ろうにも、直接文字列をクリップボードに
送るステートメントがわかりません。

メモ帳からのコピー&ペーストのように、VBAのコードだけで、
chr(10)で区切られた文字列を、貼り付け出来ないでしょうか?
(LFのコードを、いちいちサーチしていく外、無いでしょうか?)
193U ◆CZtFsGiu0c :02/11/09 08:56
>>192

LFはセル内の改行コードだから当然そうなる。コードの詳細がわからないけど、

cells(1,1).Value = "aaa"
cells(2,1).Value = "bbb"

となるようにコーディングできない? でなきゃ、

S = "aaa" & vbCr & vbLF & "bbb"

でやってみたら?(試してないけど)
>>192
Dim x() As String
Dim S As String
S = "aaa" & vbCrLf & "bbb"
x = Split(S, vbCrLf)
Cells(1).Resize(UBound(x)+1).Value = WorksheetFunction.Transpose(x)

あくまでクリップボードにこだわるなら
Dim xx As New MSForms.DataObject
xx.SetText S
xx.PutInClipboard
Set xx = Nothing
With Sheets("Sheet1")
  .Paste .Cells(1)
End With
195194:02/11/09 09:55
最後のWith〜End Withのところは
Cells(1).PasteSpecial
でもよかったな。
196VBAは好きだがVBは使わなくなった:02/11/10 21:25
>>193
駄目です。vb接頭辞の奴を使っても1セル内に全文字が行っちゃいます。

>>194
あっ!配列とは!!すばらしい。
ループで、1文字ずつ文字列の中からサーチなんて面倒なことを考えてました。
しかし、後半の奴は、ユーザ定義型が定義されていないって怒られました。
SetTextとかPutInClipboardなんてのも見慣れませんが…。
Delphiでいうところの、「Clipboard.AsText := 'aaa' + #10 + 'bbb'」
なんてのがVBAには無いようなので、Clipboard経由にしたい時に困っています。

とりあえず、前半のコードで2セルに書き込めましたので、これを利用させて
頂きます。m(_ _)m
>>196
> しかし、後半の奴は、ユーザ定義型が定義されていないって怒られました。

MSFormsを使う時は、「ツール」-「参照設定」の一覧で
Microsoft Forms 2.0 Object Library にチェックを入れないと。

または「挿入」-「ユーザーフォーム」で一旦フォームを
追加してからすぐ削除してもOK (自動的にチェックが入る)。
198VBAは好きだがVBは使わなくなった:02/11/11 00:09
>>197
出来ました!
DesktopのPCをExcel2002にしてから、Formは一度も使っていなかったらしいです。
NotePCの方で作業する事が多いので…
ありがとうございました!!!
199デフォルトの名無しさん:02/11/12 00:58
ちょっと教えていただきたいのですが
VBAで円形(oval)のShapeだけを抽出する事ってできるのでしょうか?
ovalだけデリートって作業をしたいのですが
SelectAllやるとどうしても、グラフまで選択してしまうんで・・・
どなたか良い方法を教えていただけないでしょうか?
>>199
Dim x As Shape
For Each x In Sheets("Sheet1").Shapes
  If x.AutoShapeType = msoShapeOval Then
    x.Delete ' 削除
  End If
Next
201デフォルトの名無しさん:02/11/14 19:05
一つ教えてけろっぴ。
ワークシート上で、例えば列Eのセルに書き込んでエンターキーを押せば、
必ず一つ下の行でC列のセルに移行するというプログラムを組んでるが
わからんち。。。
教えてけろ
202デフォルトの名無しさん:02/11/20 05:24
Excel VBAで英語の発音練習に使うソフトを作るつもりです。
マイク入力をwavで保存し、更に波形まで表示したいのですが、
どうすれば良いでしょうか。
Windows APIを使うらしいのですが、いまいち分かりません。
>>202
(´-`).。oO(どうすればいいんだろう?)
204202:02/11/20 05:46
ご存知でしたら、ぜひ教えてくださいー。
お願いします。
(´-`).。oO(Windows APIって何だろう?)
僕はExcel VBAで、ホームビデオに映っている人の名前を自動的に判断して、
ビデオラベルを印刷したいのですが、
Excel とビデオデッキのつなぎかたが分かりません。
キャプターでパタン認識するらしいのですが、
キャプターというのを買えば、ビデオとつなげますか?
207202:02/11/20 07:48
こーゆう奴が例えばWindows APIらしいです。

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub testsound()
sndPlaySound "C:\test.wav", 0
End Sub
208デフォルトの名無しさん:02/11/20 22:32
>199
ActiveSheet.oval.Deleteで出来たと思う

210デフォルトの名無しさん:02/11/21 23:52
すみません、こちらでも質問させてください。

ユーザーフォームのテキストボックス内で、
半角と全角のスペースを削除したいのですが、
コードがわかりません。
お願いします。
211:02/11/22 00:27
>210
こちらでも?
マルチって意味?
それなら嫌われるからやめといた方がいいよ。
また、誤解を招く書き方も駄目。

端っこのスペースを省くなら
Trim
じゃない?
212210:02/11/22 00:49
>>211
ご丁寧にありがとうございます。
気をつけます。

氏名の入力で姓と名の間にスペースを入れないで処理したいと思っているのですが
が、入力時にスペースをいれて入力されてしまった場合に、
そのスペースを削除できれば、と思っています。
213:02/11/22 01:05
>212
VB使いじゃないからうまく説明できないけど、
InStrを使ってスペースの場所を検索して
str=Mid( ?????????(InStr(str,??? ) )
こんなイメージでいけると思う。
引数とかは思い出せない。。
まぁとにかく流れとしては、
InStrでスペースの場所を探す(無ければお終い)
渡す文字列(フルネーム??)は先にTrimかけておくといいと思う。
それで見つかったらMidを使ってスペースより前(苗字?)
を取り出す。
その後またMidを使ってスペースより後(名前?)を取り出して
先ほど取り出した苗字と結合する。
FullName=Myoji & Namae
見たいな感じになるのかな。
さぁ、間違ってたら他の人頼む。

s = textbox1
L = Len(s)
t = ""
For i = 1 To L
 c = Mid(s,i,1)
 If c <> " " And c <> " " Then t = t & c
Next
textbox1 = t
215210:02/11/25 01:26
>>213-214
解決しました。ありがとうございます。
レスが遅くなってすみません。

>>213
InStrですと、スペースの検索ができませんでした。
エラーになってしまって。
ご丁寧にありがとうございます。

>>214
ありがとうございます。
教えていただいたコードを少しいじらせていただいたらできました。
本当にありがとうございました。
216デフォルトの名無しさん:02/11/29 20:07
VBAでマクロを用いて大量のグラフを作る羽目になったのですが。
グラフの出力をオブジェクトにしようか、グラフシートにしようか
悩んでいます。自分としてはグラフシートに出力したいのですが。
数十枚の枚数が要りそうで足りるかどうか心配なのですが
一つのファイルに作れるグラフシートの最大数。ご存知の方おられませんか?
217216:02/11/29 20:08
EXCEL2000での話です。すみません。
思うんですけど、この手の質問って、実際にやってみれば分かるんじゃないですか?
>>216

適当なデータをグラフシートに出力するマクロを作って、for-nextで回してみました。
あまりループの回数を大きくすると応答なしになってしまうので、100刻みで取り敢えず
1000個まで作れる事を確認しました。

この場合のワークシートの大きさは3×3の要素の棒グラフで3Mバイトと大したことは
ありません。

これはあくまでも予想ですが、65535個ぐらいまでは作れそうな気がします。そこまで
行ったら非実用的ですが。
>219
出力先を別のブックにするようにすれば無限に作っていけるんじゃない?
シート内の全てのトグルボタンやチェックボックスを
計算中は非表示にしたいんですが
効率のいい方法はなにかありますか?
222216:02/11/30 23:01
お蔭様で上手くいきました。どうも有り難うございます。m(__)m
>>221
トグルボタンとチェックボックスだけという区別方法は分からないけど、
次のプログラムはコントロールを計算中消してくれる。

Dim x As Shape

For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = False
End If
Next

Calculate

'計算処理を行う

For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = True
End If
Next
>>223
ありゃ、俺、msoOLEControlObject チェックしてなかったような気がする。
問題無かったし・・・つか、フォームコントロールがはじかれるな。これ。
ま、本質じゃないし、msoFormControl とかも対象に入れればOKだ。
>>224
フォームコントロールも使うなら種類がチェックできますね。ActiveXコントロールの
種類を区別できる方法があったら知りたいです。

Dim x As Shape
For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = False
ElseIf x.Type = msoFormControl And (x.FormControlType = xlCheckBox Or x.FormControlType = xlOptionButton) Then
x.Visible = False
End If
Next

Calculate

'計算処理

For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = True
ElseIf x.Type = msoFormControl And (x.FormControlType = xlCheckBox Or x.FormControlType = xlOptionButton) Then
x.Visible = True
End If
Next
質問です。
セルに記入された日付を参照して曜日をだしたいのですが、
(A1に年、A2に月、A3に日を入力してその値を参照)
Weekday(Range("A1") / Range("A2") / Range("A3"))
とやってみても、
変数に読み込んでみてもうまくいきません。
何かいい方法はありませんか?
>>226
Weekday(Format(Range("A1")) + "/" + Format(Range("A2")) + "/" + Format(Range("A3")))
さらに曜日を表示するには
Format(Weekday(Format(Range("A1")) + "/" + Format(Range("A2")) + "/" + Format(Range("A3"))), "dddd")
まあこれはいらないと思うけど一応書いておくね。
>>227-228

ありがとうございます、助かりました。
いつか質問に答える側を目指して精進いたします。
230デフォルトの名無しさん:02/12/04 05:56
コマンドプロンプト上で、
>hoge.exe とやるとうまく動くのですが、
Excelにコマンドボタンを配置し、以下のマクロを登録、実行すると
コマンドプロンプトの時と違う挙動を示します。

Sub Run()
CreateObject("WScript.Shell").Run ActiveWorkbook.Path & "hoge.exe", , True
End Sub

何が原因と考えられるでしょうか。
>>230
挙動が異なるとは具体的にどういう事を指すのかわかりかねますが、Runメソッドに
与えるコマンド文字列のパス中にスペースが入るとエラーになるようです。

CreateObject("WScript.Shell").Run Chr(34) + ActiveWorkbook.Path + "\hoge.exe" + Chr(34), , True

のようにしたら動きませんか。
232230:02/12/04 15:14
>231
レスありがとうございます。

挙動不審の原因が分かり、自力で解決できました。
原因は hoge.exe 中でファイル tako をオープンしていたのですが、
エクセルから実行させるときは、hoge.exe 中で
tako のパスを指定しなければならないというものした。
同じフォルダにあれば、パスはいらないと思っていたのですけどね。
>>232
そうでしたか。それはよかったです。
カレントディレクトリの意味がわかれば解決できますね。
234デフォルトの名無しさん:02/12/05 11:45
Excel2000からセーブ時にWebページとして保存できますが、
このときchartオブジェクトはgifファイルに変換されますよね。
この機能だけ単独で使いたいのですが何かよい方法はないでしょうか?
今はSaveAsメソッドにxlHtmlをオプションで渡し、
できあがったファイル群からgifファイルを抜き出すと言う手法を用いているのですが
いまいちスマートではないので、他に方法があったらおしえてください。
excel chart export
>>235
アドバイスありがとうございました。

chartオブジェクトにexportなんてメソッドがあるの知らなかった。
97からか?
今まで95ばかりだったので知らなかった。
237デフォルトの名無しさん:02/12/10 21:43
初歩的な質問ですみませんが
ActiveSheet.UsedRange.Address
で帰ってきた選択範囲
$G$10:$BA$571などを
をcells形式で所得したいのですが
どうすればいいでしょうか
238デフォルトの名無しさん:02/12/10 22:00
>>237
所得すると税金がかかるぜよ。
ところでCells形式にして何に使うの?
目的がわからん。
ActiveSheet.UsedRange自体がRangeオブジェクトだから、そのまま
使えばいいんじゃないのか?
VBAでオーナードローしてる人いる?
240237:02/12/11 11:03
>$G$10:$BA$571などををcells形式で所得したいのですが
データ範囲の上端、下端、右端、左端の位置が欲しかったのです。
しかたないので入門書と格闘しながら
Function kiridasi(x As String) As Integer
Dim a As Integer, b As Integer, c As String, x As String
'$D$5:$H$9のような範囲が与えられた時 初めの$Dを抜き出し4にする。
a = 2 '最初の$から
b = InStr(a, x, "$", 1) '次の$まで
c = Mid(x, a, b - a) '抜き出し。
x = Mid(x, b) '元の文字列から抜いた分を取り除く。Xは$5:$H$9になる

If IsNumeric(c) = "False" Then '文字なら数字に直して返し
If b - a = 1 Then
kiridasi = Asc(c) - 64
Else: kiridasi = Asc(Mid(c, 2) - 64) + Asc(Mid(c, 1, 1) - 64) * 24
End If
Else: kiridasi = Val(c) '数字ならそのままの値を返す
End If
End Function
というサブルーチンを作っていざ実行しようとすると
ByRef 引数の型が一致しません とでるので困っています。
x = Mid(x, b) の行のところが明らかにおかしくなるのですが、
一体どのような問題なのでしょうか?どなたか御指摘頂けませんか?
変数のスコープの問題のように思ったのですが良く分かりません。
>240
ByValにしたら
242240:02/12/11 13:48
ByValにしたら始めの一回目は上手くいきますが
結局元の文字列変わらないので何回やっても最初のDしか変換できません,,,困った
'左上のセルを返す
Private Function LeftTopR(ByVal r As Range) As Range
 Set LeftTopR = _
  r.Parent.Cells(r.Row, r.Column)
End Function

'右下のセルを返す
Private Function RightBottomR(ByVal r As Range) As Range
 Set RightBottomR = _
  r.Parent.Cells(r.Row + r.Rows.Count - 1, r.Column + r.Columns.Count - 1)
End Function
With ActiveSheet.UsedRange
  Debug.Print .Item(1).Address
  Debug.Print .Item(1, .Columns.Count).Address
  Debug.Print .Item(.Rows.Count, 1).Address
  Debug.Print .Item(.Count).Address
End With

でいいじゃん。
245デフォルトの名無しさん:02/12/11 20:41
>>240
>データ範囲の上端、下端、右端、左端の位置が欲しかったのです。
その位置を何に使うのか書いてみれ。
大体余計な取得をするやつはヘタクソと相場が決まっているのだが。

繰り返すがActiveSheet.UsedRangeはRangeオブジェクトだよ。
そのまま使えばいいんじゃないのか?

246245:02/12/11 20:48
>>240
もしかして行番号や列番号を使ってCells形式でループを回すのか?
For Each Nextを使えばそんなもの必要ないから違うだろうな。
廃れてるな。
248240:02/12/11 22:59
シートに新しい入力をする時それまでの入力と被らないように
データの入力の限界を求めようとしたんですが...
ようやく解決しました。お手数かけてすみません。
まだVBA始めてたったの数週間の素人なもので
EXCEL2002(Win)で正規表現の置換がしたいんだけど、具体的にどうするの?
例えば
A = "ab" & vbCrLf & "xy"
B = s/$/z/g

B に "abz" & vbCrLf & "xyz" が入るようにしたい。
性器表現
正規表現はVBSのRegExpオブジェクトを使えばできるけど、
この程度ならReplace関数でもできるだろ。

A = "ab" & vbCrLf & "xy"
B = "z"
MsgBox Replace(A, vbCrLf, B & vbCrLf) & B
252249:02/12/12 07:07
>>251
ありがと。RegExpってのがキーワードね。
253デフォルトの名無しさん:02/12/12 21:06
教えてください。

エクセル2000でテキスト開いて
テキスト形式で保存する時
"があるとその前後に勝手に"がついてきて
困ってます。
どうするとなくなりますか?
254254:02/12/12 23:13
すみませんがオプションボタンに同じ名前をつけてコントロール配列を使おうとすると
Nameプロパティを設定できません。名前を特定できません。と出て、
リネームできないんですがコントロール配列はVBだけでExcelVBAでは使えないんですか?
クラスモジュールによる擬似コントロール配列の作成
ttp://www.moug.net/skillup/opm/opm08-01.htm
256254:02/12/12 23:48
どうも有り難うございました。m(_ _)m
257デフォルトの名無しさん:02/12/14 12:19
エクセル2000のVBAで他のアプリ(メモ帳など)から切り取ったテキスト文を
inputboxのdefaultに使いたいのですが、
その方法が良く分かりません。Clipboard.GetTextを使うような気がしますが
具体的にはどうすれば良いのでしょうか?
258257:02/12/14 16:00
色々試してみても上手くいかず、埒があかないため
他の方にお伺いすることにします。失礼しました。
>258
Dim MyData as DataObject

Private Sub CommandButton1_Click()
Dim s As String

TextBox1.SelStart = 0
TextBox1.SelLength = TextBox1.TextLength
TextBox1.Copy

MyData.GetFromClipboard
s = InputBox("", "", MyData.GetText(1))
End Sub

>>257>>258
例えばテキストボックスに貼り付けるだけなら

TextBox1.Value = ""
TextBox1.Paste

ではいかんの?
こんな風にしてもいいが面倒くさい。

Dim dat As DataObject
Set dat = New DataObject
dat.GetFromClipboard
TextBox1.Text = dat.GetText(1)
262257:02/12/15 15:02
>>259
>>260
>>261さん、おかげさまで上手くいきました。
有難うございます。
263デフォルトの名無しさん:02/12/17 13:07
エクセルのVBAで10秒たつと処理が始まるようにしたいんですが・・・
なにかおすすめの方法はありませんか
264デフォルトの名無しさん:02/12/17 13:13
>>263
APIのsleep関数を使う。
>263
「10秒経ったらこのボタンをおしてください」
というボタンを置く
266263:02/12/17 13:43
>>264
なるほど sleep関数勉強してみます 

>>265
 それもありですね・・・
267デフォルトの名無しさん:02/12/17 20:45
お願いします、助けてください。検索してもぜんぜん見つからない・・・・・

RND関数では、負の乱数を発生させることができません。標準分布抽出方の乱数をEXCEL上で使わねばならず、VBAでやることできず困っています。

詳しい方おながいします!
-つけりゃいいじゃん
269デフォルトの名無しさん:02/12/17 20:54
>>268
ああー、早速のレスありがとう。ち、ち、違うんですー!
正戸負両方の乱数が欲しいんですー。
マイナスつけたら負の乱数だけになるー。
(ToT)
>>269
-5から5を発生させたかったら、0〜10の数をRNDで作って5を引く。
難しかったかな?
0.5引く。そっから2倍して使うもよし。
272デフォルトの名無しさん:02/12/17 21:02
>>270
>>271
RNDって、(擬似)正規標準分布で0.5が平均なんですね?
知らなかった。ありがとうございます。
273デフォルトの名無しさん:02/12/17 21:07
>>270
>>271
おお、イイ!ホント、イイかんです。今チェックしたら、ちゃんとイイ感じでした。お二方さん、ありがとう!
「ち、ち、違うんですー!」
ってなんか萌える。
275デフォルトの名無しさん:02/12/17 21:25
>>274
それって、挿入するときのこと想像しているでしょう?
275はかなりエロい。
>263
timeかtimer関数でも出来る(日付をまたぐとどうなるか知らん)

>273
272のツッコミを無視して大丈夫?
解ってスルーしてるなら良いけど
誰か272にいちようツッコミを入れてあげてください
Excel VBAで作ったものを売り出すんだけど、
いくらまでなら許せる?
>279
それ使うといくら儲かる?
0円
282デフォルトの名無しさん:02/12/17 23:43
マクロを先週覚えた初心者ですが、このスレは初心者OK?
Excelには Application.WaitやApplication.OnTime というものがあるのだが。

それと俺には >>277
> 272のツッコミを無視して大丈夫?
> 解ってスルーしてるなら良いけど
この意味がサッパリわからん。

>>282
OKですが、何か?
284デフォルトの名無しさん:02/12/18 00:02
先ほどは親切にありがとうございました!!!!!
たびたびすみません!
ExcelのVBAからC++でビルドされたバイナリ呼び出す手法を急に勉強しないといけなくなりました!!!!!
推薦図書おながいします!!!!!

バイナリって何形式よ?
DLLならヘルプでDeclareステートメント見ろ。
286デフォルトの名無しさん:02/12/18 00:09
DLLです!わかりました、ありがとうございました!早速調べてみます!
VBA暦12時間・・・・・とほほ・・・・・
287デフォルトの名無しさん:02/12/18 00:10
>>284>>286です。
書籍のほうもよろしくお願いします。やっぱりあったほうがいい。
書籍は俺はわからんからパス。

VB(.NETでなく旧VB)は持ってないの?
VBからDLLを呼び出すのと方法はまったく同じなので、
VBの方で調べてみた方が情報がたくさんあると思う。
289282:02/12/18 00:26
初心者OKみたいなのでお言葉に甘えて。

入力というsheetとリストというシートを作りました。
リストのK1セルに「=COUNT(A:A)+1」という数式を入れときます。

入力シートのB1セルに書いた文字をリストのB2に
入力シートのB2セルに書いた文字をリストのC2に
入力シートのB3セルに書いた文字をリストのD2にそれぞれ貼って行きたい。
リストのA2には「2」が入るようにしたいのです。

そしてその次からは続くように
入力シートのB1セルに書いた文字をリストのB3に
入力シートのB2セルに書いた文字をリストのC3に
入力シートのB3セルに書いた文字をリストのD3にそれぞれ貼って行きたい。
リストのA2には「3」が入るようにしたいのです。
ちなみに書いたのは
Sub データ貼付()
'
' 入力シートからリストシートへデータ貼り付け

行番号 = Sheets("リスト").Range(K1)

Sheets("リスト").Range(K1) = Sheets("リスト").Cells(行番号, 1).Value
Sheets("入力").Range(b1).Value = Sheets("リスト").Cells(行番号, 2).Value
Sheets("入力").Range(b2).Value = Sheets("リスト").Cells(行番号, 3).Value
Sheets("入力").Range(b3).Value = Sheets("リスト").Cells(行番号, 4).Value
Sheets("入力").Range(b4).Value = Sheets("リスト").Cells(行番号, 5).Value
Sheets("入力").Range(b5).Value = Sheets("リスト").Cells(行番号, 6).Value
>283
RND()は正規分布じゃなくて一様分布なのだが、そのまま使ったりしてないだろうなぁということ
267を見る限り不安だ(w
291デフォルトの名無しさん:02/12/18 00:47
>>290
やっぱり・・・・・
しばらく使ってみてて、これってどうやら擬似標準正規分布じゃないな、と思いました。
だって、オプションの数値解がおかしかったんだもん。でも、デルタヘッジの有用性を
調べたいだけなので、現時点では問題ないと思う。とにかく、いろいろと親切にありが
とう。ここのスレの人たちイイ人。
>>289
入力シートは常に同じ場所に入力して、リストの方だけが増えていくということね?
説明の方はセルが3つでコードの方は5つあるけど、セルの数は決まってないの?

1回ずつコマンドボタンか何かで転記するの?
293282:02/12/18 00:57
>>292
>入力シートは常に同じ場所に入力して、リストの方だけが増えていくということね?
全くその通りです

>説明の方はセルが3つでコードの方は5つあるけど、セルの数は決まってないの?
レスとして書くのは3つくらいがいいかと思って省略しちゃいました・・・

>1回ずつコマンドボタンか何かで転記するの?
はい。ボタンにマクロを登録します。入力したものはクリアーもする予定です。
294282:02/12/18 01:00
>>282 の自分のレスで訂正
○ リストのA2には「3」が入るようにしたいのです。
× リストのA3には「3」が入るようにしたいのです。
> レスとして書くのは3つくらいがいいかと思って省略しちゃいました・・・
だから結局ここのところはどうなのよ?
仕様がわからんから 5個固定にしたよ。

あと、K1セルを作らなくても最終行を取得して追加すればいいと思うので、
勝手にそうした。
Dim wsList As Worksheet
Dim 行番号 As Long
Dim 入力数 As Long
入力数 = 5

Set wsList = Worksheets("リスト")
With wsList.Cells(wsList.Rows.Count, 1).End(xlUp)
  行番号 = .Row + 1 + IsEmpty(.Value)
End With

With wsList.Cells(行番号, 1)
  .Value = 行番号
  .Offset(, 1).Resize(, 入力数).Value = _
    WorksheetFunction.Transpose(Sheets("入力").Range("B1").Resize(入力数))
End With
296282:02/12/18 01:26
>>295 ありがとうございます。5個で良いのです。
自分のはどこが違ってたか、>>295の内容は分からないですが、ひとまず動きました。
もっとよく勉強して出直してきます。
遅い時間まで本当にありがとうでした。
297295:02/12/18 01:37
> 自分のはどこが違ってたか、

代入の左辺と右辺が逆だし、k1とかb1とかはダブルクォーテーション記号
で括って文字列にする必要がある。

295のコードは
リストシートの1行目が空欄の場合も2行目から始めてよければ、
もうちょっとシンプルにできる。

Sub データ貼付()

Const 入力数 = 5
With Sheets("リスト").Range("A65536").End(xlUp).Offset(1)
  .Value = .Row
  .Offset(,1).Resize(,入力数).Value = _
    WorksheetFunction.Transpose(Sheets("入力").Range("B1").Resize(入力数))
End With

End Sub
>>291
乱数12個足して6引く。
299282:02/12/18 01:45
説明書を絶対読まない自分。
本の一部見て、わかりもしないくせに自分なりにアレンジしたのがダメでした。
初めて2chをありがたいと思ったよ。thanks>>295
300ゲッと。
301デフォルトの名無しさん:02/12/18 10:15
dd
302デフォルトの名無しさん:02/12/18 16:15
>>298
自分で背景理論的正当性がわかんないけど、やってみます。
303デフォルトの名無しさん:02/12/18 17:03
ここのスレの住人の人で、C++のCOMのDLL呼び出している人いますか?
ご提案どおりHELP見たり検索したりしたんですけど、具体的な手法がわからないままなんです。
COMにC++とか関係あるの?
>>304
だとしたら全然Common Object Modelじゃないな。
306デフォルトの名無しさん:02/12/18 17:37
おまえら、VBAでlogexを計算するプログラムを教えて下さい。
>>303
お前もう、いいかげんしつこいし、全然わかってないよ。

COMのDLLを呼び出すもなにも、
VBAでオブジェクトを扱う=COMのEXEまたはDLLの呼び出し
なんだよ。

最初に参照設定をしとけば、あとはお前がVBA側で
それを意識する必要はない。
MsgBox Application.Path
これもCOMのオブジェクトの呼び出しなんだよ。

お前そんなこともわからないで本当にC++で
COMコンポーネントを作れるのか?
308デフォルトの名無しさん:02/12/18 21:35
>>307
ごめんなさい。ぼく低学歴で知能指数も低いんです。Rogersonの参考書の範囲で
しか知らないんです。ずっと検索したりヘルプから探してるんだけど、なぜかきっか
けすらつかめません。あなたはきっとぼくよりも高学歴で高給でスキルも持ってら
っしゃると思います。お情けと思って、参考書をご存知なら教えてくださいませんか?
釣りに付き合うのも飽きたな。もうそろそろ「釣れた」って言って良いよ。
310デフォルトの名無しさん:02/12/18 23:53
>>309
これはネタではありませんよ。ホントです。おながいします。
311デフォルトの名無しさん:02/12/19 00:13
「低学歴で知能指数も低い」のなら、参考書なんか読んでも分りませんよ。

312デフォルトの名無しさん:02/12/19 00:41
>>311
そうおっしゃらずに、バカを助けると思って・・・・・
ご存知の方、おながいします。
しつこいな。これが最後だ。
VBAの入門書をどれでもいいから買え。
VBAのステートメントを数個覚えるだけで自動的に呼び出せるのに
専用の書籍なんかあるかボケ。
書店で立ち読みして自分に合いそうな物を買えばいいんだよ。
「おながいします」って何だよ、ふざけるな。
まあまあ・・・
マーマー
317デフォルトの名無しさん:02/12/19 01:27
低学歴で知能指数も年俸も低い哀れな男を助けると思ってください。
参考書はちゃんと持っていますし、活用しています。
Inside COM, MSP, Rogerson
Excel 97 VBA辞典 翔泳社変

それにしてもこんなに検索もHELPも使えなかった事例はありません。とほほ・・・・・
完全放置
>>317
Inside COM を読破できる貴方様を助ける事が出来る香具師など
このスレには居りませんです。
320殺すケ:02/12/19 01:43
自分でCOMを作ってVBAで使いたいナリか?
最後のレスが「釣れた!」なわけだが、釣りとばれてしまって「釣れた!」って言うほどむなしいものはないだろうなぁ。
別にVCでも
ATL使えば簡単にCOM(AxtiveX DLL)
くらい簡単に作成できるのだが...

あとは、対象のDLLに対して
Regsvr32.exe *.dllと登録し
ブビエディタのメニュー ツール 参照設定でチェックすれば
new宣言でクラスが使えるし。
dim cl as new * (補完リストに名前がでてくる)

参照設定しない場合は
クラスをobject型で宣言し
set cl = createobject("DLLプロジェクト名-普通拡張子を除いた名前
レジストリエディタで検索すればでてくる")

あとはそのクラス(cl)に対して操作をするだけ。
使い終わったら最後に
set cl = nothingをつけて解放させる。

それほどキーキー騒ぐほど難しい回答でもないのだが。
> 別にVCでも
> ATL使えば簡単にCOM(AxtiveX DLL)
> くらい簡単に作成できるのだが...

コンパイラ=VC++ とは限らんのだが。
まあ、こんな厨が使えてるとすればATLだろうけどな。

何言ってもわからんアホは放置しとけ。
324デフォルトの名無しさん:02/12/19 11:12
>>317
Inside COMでは、VC++のなかだけで演習問題を淡々とやっていくだけなので、Excel VBA空何かをいろいろする、というような趣旨の具体的な内容は一切ありません。

>>320
COMの参考書にでてくるようなDLLをVC++で作って、それに実装される関数をExcel VBAから使いたい、ということです。

>>322
親切にありがとうございます。ご指摘の点は感覚的に理解できましたし、今VBAでちょ
っとやってみたら、なんとなくできそうです。やってみます。
ちなみに、COM的なDLLじゃなくて、一番単純で古典的なDLLでも、レジストリにのっち
ゃえば、参照できるんですよね?この線も自分でやって見ますけど。たしか、COMの
参考書にでてくるDLLの書き方には、カウンタとかがあって、初歩的なDLLの書き方
とちょっと違っていたような気がします。もう2年以上も前にやったことなのですが、思
い出しながらやってみます。

>>324
>番単純で古典的なDLLでも
Win32 DLLのことか?
そのDLLとActive X DLL とは全く別物だぞ。
Win32APIを呼ぶ方法(Declare宣言)
で使用しなければならない。
326デフォルトの名無しさん:02/12/19 11:49
あ、やっぱり。ちょっと、そのWin32APIの路線からやってみます。そっちのほうが簡単
そう。InsideCOMにでてくるC++のDLLはIUnknownとかRefとかが出てくるし、どちらか
といえばややこしそうなので、古典的なDLLのほうが簡単そうだと、自分では思ってい
ます。でも、古典的なDLLも、VBAの『参照』からいろいろできるのでしょうか?なんか
ぱっと見、全然できそうにないように思います。ま、自分でコード書く手間はいといませ
んから、ツール系が使えなくてもいいのですが。レス感謝。バカでゴメン。
釣れすぎ
328デフォルトの名無しさん:02/12/20 00:05
VBAからSheetのオブジェクト名って変更できますか?
>>328
Sheets("aaa").[_CodeName] = "bbb"
でできた気がする
できた!ありがとういい人
>>329
それじゃエラーになったよ。

Sheets("aaa").Name = "bbb"

で行けるよ。
>>330
あれ、訂正しようと思ったけど、できた?
今やってみたら、
Sheets("aaa").[_CodeName]
という記述ではダメだったわ。

一旦Worksheet型にキャストするか、または
モジュール名を直接指定すればできた。
Dim w As Worksheet
Set w = Sheets("aaa")
w.[_CodeName] = "bbb"
または
Sheet1.[_CodeName] = "bbb"

>>331
それはシート名だろ。質問はシートのモジュール名なんだが。
333デフォルトの名無しさん:02/12/20 02:54
333げと
>>332
質問者じゃないが良い情報をありがとう。
ヘルプには
「実行時に、このプロパティの値をコードで変更することはできません。」
なんて書かれてますね。
334丸血:02/12/21 01:19
--------------------------------
1975213
1976172
1982149
198371
1984150
1985112253343
1986122151173
198754
19884
--------------------------------
という
--------------------------------
【西暦】 【コード1】  【コード2】 
               ↑ここは、あれば3,4と続く

に並ぶファイルがあります。
335丸血:02/12/21 01:20

これを
経年的に見るために

--------------------------------
1975213
1976172
1977
1978
1979
1980
1981
1982149
198371
1984150
1985112253343
1986122151173
198754
19884
--------------------------------
という風に【西暦】を年が`続いていくよう'に
挿入していきたいのです。

アルゴリズムとして
どのように書けばスマートに書けるでしょうか?
336丸血:02/12/21 01:26
済みません。レイアウト崩れました。
213
172
149
71
150 ,
112 ,253 ,343
122 ,151 ,173
54
4
がコードで
1975
1976
1982
1983
1984
1985
1986
1987
1988
が【西暦】です。
シートに貼り付けてsortメソッド
>>335
西暦とコードを分けてシートに貼り付けて、西暦の優先順位を高くして並べ替え(Sort)
それか、全部のデータを文字列として並べ替え
339デフォルトの名無しさん:02/12/22 03:56
Excelの関数としてはNormSDist、つまり、標準正規分布があるのに、なぜか、VBAの中では使えません。
VBAのHELPをいろいろ検索したり、ネットでVBAで累積標準正規分布積分を簡単に計算する方法を探し
たのですが、見つかりません。
ビルトイン関数として必ずあるはずだと思うのですが、ご存知の方、教えてくださいませんか?
>>339
Application.NORMSDISTではだめだった?
341デフォルトの名無しさん:02/12/22 04:47
>>340
ご親切にありがとうございました。うまくいきました。現在、XLLに実装されている関数を呼び出せずに苦労しています。アドインにはちゃんと出るんですが・・・・・
>>341
アドインをVBAから呼び出すという事ですか?
343デフォルトの名無しさん:02/12/22 05:46
>>342
そうです。でも、自分で今回は解決できました。
Runを使えばよかっただけの話です。(爆)
344デフォルトの名無しさん:02/12/22 12:57
(爆)使うやつは氏ね。
>>344
つぅか有言実行がルールだろ。
回線切って首つり自殺した奴なんて数えたらきりがないぞ。

>>343は爆死を選択か。まぁ、うまくいけば一瞬だな。
346デフォルトの名無しさん:02/12/22 13:54
>1
一番の違いはマクロセキュリティのデフォルト値でしょう。
故にブックのモジュールに書くのはやめた方がよい。イベントプロシージャではなく、オブジェクトにマクロ登録すべし。
347デフォルトの名無しさん:02/12/22 16:20
コンボボックス上で表示される複数の選択肢は、参考書等によれば、シート上の
セルから持ってくる場合がほとんどのようです。

ぼくは、VBAそのものにその選択肢となるものを埋め込んでしまいたいのですが、
やり方がわかりません。

で、いろいろ調べたのですが、シート上から持ってくる方法(つまりすでに知っている
方法)しか見つかりません。

C++のように、文字列の配列みたいなかんじでVBAの中に定義して、コンボボックス
のプルダウンメニューから選択できるようにしたいのです。おながいします。
おながいします。
おながいします。

>>347
単にStringな変数宣言して初期値放り込んでやればいいんでは?
350デフォルトの名無しさん:02/12/22 16:40
>>349
また徹底していじめられるかと思いましたが、マジレスが着たのでとてもうれしいです。
複数の選択肢をVBAのスクリプトの中で指定したいのです。ご指摘の方法だと、ひと
つしか指定できませんから、コンポボックスでプルダウンしても他になにも出てきませ
ん。Stringで複数の選択肢を配列のように指定して、プルダウンで選択できるように
することができますか?
>>350
>ひとつしか指定できませんから

必要な分その定数的な変数作るとか配列にするとか。手はいくらでもあると思われますが。
352デフォルトの名無しさん:02/12/22 17:22
>>351
その辺はぼくもなんとなく想像できたのですが、具体的にどうコードを書けばいいか
わかりませんでした。セル範囲を指定する古典的な方法をなんとか応用して、配列
の線、複数の提携文字列の線、両方でアプローチしてみます。プロパティから指定
する方法があれば便利だな、と思ったのですが・・・・・コードも一発でわかるし。
353デフォルトの名無しさん:02/12/22 17:23
突然の質問ですみません。
シートにオプションボタンを15個くらいつけたら
起動時間がずいぶんかかるようになってしまいました。
これはどうにもならないのでしょうか?
354352:02/12/22 21:36
コンボボックスのTextプロパティに配列を代入する方法ですが、ダメでした。
ListFillRangeを使ってセルの範囲を使う方法は使いたくないのです。
どなたかよいお知恵を・・・・・
>>354
(´∀` )エヘヘ VB初心者質問スレ Part19
http://pc3.2ch.net/test/read.cgi/tech/1039859691/530

死ねクソマルチ。
フォーム名の名前の文字列でフォームって表示できますか?
UserForms(フォーム名).Show
でうまくいきませんでした。
>>356
直接の方法は無いと思う。
何らかの工夫(例えば表示するコード自体を実行時に生成するとか)をしない限り。

>>350
学習能力ゼロの能無しは放置。
といきたいところだが、いいかげんマジで目障りだから二度と来んな
糞マルチ野郎。
了解しますた。
359デフォルトの名無しさん:02/12/22 23:52
>347
そんな時にはAddItem メソッド使え

With ComboBox1
.AddItem "おまえ"
.AddItem "ちったー"
.AddItem "生きてるうちに"
.AddItem "頭使えよ"
End With

どうよ
360デフォルトの名無しさん:02/12/23 01:32
>>359
実は『う〜、世にでているアプリはみんなできてるんだから絶対方法がある
はずだ〜。こうなったらプロパティーを一つ一つ調べてみるべ。』と思って地
道にやっていたら、UserForm_Initialize()のところでAddItemがあることがわ
かりました。で、ここで定義した値が他の関数からうまく参照ができることま
で確認して報告しようと思っていたんですけど、せっかくのご返答ですから、
お礼を兼ねてご報告します。ぼくは低学歴で、年収も低く、キャリアもかなり
しょぼいので、みなさんがまぶしいです。一生懸命検索するよりも、一番最
初の親部分からヘルプをなめるのも有効ですね。
>>359さん、ありがとう。マルチ、ごめんね。
超ウザい。二度と来んなマルチ野郎
362デフォルトの名無しさん:02/12/23 04:31
>>361
>>360です。なんとかフォームらしいフォームができました。あとはグラフ関連のマクロを書いてなんとか一段落しそうです。
では。




















>>630に抗議します。









364デフォルトの名無しさん:02/12/23 17:16
Excelマクロで作ったんだけど、
ファイルサイズが700Kでセーブが異様に遅くなってしまった。
で、どこがそんなにでかいのかと思って、
シートとかフォームとか消していったんだけど、
全部消しても300Kまでしか減らなかった。
新規のワークブックは30Kぐらいなのに。
これは何のデータですか?
>>364
なぜかしらんか、VBAで色々編集してるとサイズが大きくなるよね。
新規のブックに全部インポートすれば、かなり小さくなるはず。
366デフォルトの名無しさん:02/12/25 00:09
初めまして。質問させてください。
EXCEL VBAでWorksheet_Changeを使っているんですが、
そのプロシージャ(?)の中でセルに値を入れると
またWorkSheet_Changeが呼び出されて無限ループになってしまうようです。
数値を扱うのでセルに値を入れるときは文字列型にしたり
パブリック変数でフラッグ立てる真似事したり、
他のワークシートを作ってフラッグ立てる真似事したり(もうメチャクチャ)
どうにもなりません。
プログラミングの経験はN88 BASICだけです。後はLOGO...
絶対何か見逃してるんと思うですけど、もう限界です。
367デフォルトの名無しさん:02/12/25 00:09


メリークリスマス。。★彡
パートナーは見つかりました?(o^.^o)

http://abba.hp.infoseek.co.jp/1/

368366:02/12/25 00:10
ごめんなさい、sage忘れました。
今の状態はこんな感じです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer, k As Byte, h, flag01
Dim first_heat_min(10, 2) As Byte
flag01 = Target
If TypeName(flag01) = "String" Or _
TypeName(flag01) = "Single" Then GoTo Label01
flag01 = ""
h = Empty
For i = 0 To 10
For j = 0 To 2
k = k + 1
h = Cells(k, 6).Value
If TypeName(h) <> "String" Then first_heat_min(i, j) = Cells(k, 6).Value
Next j
Next i
k = 0
For i = 0 To 10
For j = 0 To 2
k = k + 1
If first_heat_min(i, j) <> 0 Then Cells(k, 11) = " " & (first_heat_min(i, j) + 0.0001)
Next j
Next i
Label01:

End Sub
お願いします、何かヒントを下さい
フラグでいいじゃん。何の問題が?
370366:02/12/25 00:16
>>369
速レスありがとうございます。
フラッグの立て方も間違えてるんでしょうか?
僕は標準モジュール内でパブリック変数を宣言してセルに値を入れる前に
false、いれ終わったらtrueに戻して、
プロシージャ(?)始まったらすぐにfalseならExit Sub
としています。
もしかしたら何か大きな勘違いをしているんでしょうか?
あぁ、これ動かないってこと?
372366:02/12/25 00:29
>>371
あ、そうですね。
前はWorkSheets_Changeからcallで標準モジュール内のプロシージャ
を呼び出してたんですけど、そうしたら無限ループになってました。
今WorkSheets_Change内でやったら今度は371さんの言う通りに
動きませんでした。最初にフラッグをTrueにせんとあかんかと思って
Double_Clickイベントを先に作ってフラッグをTrueに設定してみたりしましたが
だめでした。
俺の場合

Private Sub Worksheet_Change(ByVal Target As Range)
 Static ExcFlg As Boolean

 '二重起動防止
 If ExcFlg = True Then Exit Sub

 ExcFlg = True

処理...

 ExcFlg = False
End Sub

もっといいのあるかも知れんがとりあえずこれで。寝る。
374366:02/12/25 00:37
えっと連続投稿で申し訳無いんですけど、
WorkSheet_Changeイベントを一時的に無効にする
メソッド(?)って無いんでしょうか?
確かイベントを止められたはず。でもよけいあれな気が
376366:02/12/25 00:42
>>373
ありがとうございました。374でダブって申し訳ありませんでした。
なんとかなりました。
Static...勉強不足でした。今からヘルプを読み返します。
377366:02/12/25 00:58
たびたびすいません。ヘルプを参照したんですが、
>Dim ステートメントの代わりに
>Static ステートメントを使用すると、宣言された変数は、
>モジュールの実行中、値を保持します。
「モジュール」の概念を理解していないので
混乱してしまいました。一晩かけて勉強させて頂きます。
>>369さん、373さん、夜分遅くありがとうございました。
(もしかして同じ方ですか?だったらごめんなさい)
メリークリスマス。
378デフォルトの名無しさん:02/12/25 01:01
>>374
EnableEventsの事か?
でもこれはエラー処理をしっかりやらないと結構とリ扱いが難しいよ。
>>377
メリークリトリス!
380366:02/12/25 01:10
>>378
詳細を教えていただけますか?
今ヘルプを参照した限りではそう難しく無さそうなんですが...
どういう場面でエラーが出やすいんでしょうか?
>>379
どもです......ん?
>>380
378ではないが、仮にEnableEventsをFalseにしている状態の時に
実行エラーが発生してプロシージャが中断すると、Falseのままに
なってしまうのでまずいということだと思う。
エラーをトラップしてEnableEventsを元に戻せるようにした方がいいと。

それにしても糞コードだな。
なんで Byte型使ってんの(小さい方がいいと思ってるの)?
なんで k しか使ってないのに i や j でループしてんの?
ループも1ヶ所にまとめられるだろ。↓のような感じで。

Dim h As Variant, i As Long, first_heat_min As Long
Select Case VarType(Target.Value)
  Case vbString, vbSingle: Exit Sub
End Select

For i = 1 To 33
  h = Cells(i, 6).Value
  If VarType(h) <> vbString Then
    first_heat_min = h
    If first_heat_min <> 0 Then
      Application.EnableEvents = False
      Cells(i, 11).Value = " " & (first_heat_min + 0.0001)
      Application.EnableEvents = True
    End If
  End If
Next i
382381:02/12/25 06:15
ちなみに俺だったら、
Dim r As Range, c As Range
Set r = Intersect(Cells(1,6).Resize(33), Target)
If r Is Nothing Then Exit Sub
For Each c In r
   'ここでc.Valueを判定してから c.Offset(,5).Valueをセット
Next c
のような形にする。
383366:02/12/25 13:20
>>381
ありがとうございます。参考にさせて頂きます。
>なんで k しか使ってないのに i や j でループしてんの?
ご指摘もっともです。
まだWorksheet_Changeが動くか試してる状態だったんで
とりあえず適当にコードを継ぎ接ぎした結果がこれです。
でも>>382はすごく参考になりました。
ありがとうございます
他のBookのModule内に定義されてる関数を呼ぶのってどうしたらいいんでしょうか?
また、他Bookに置いてあるボタンをVBAのコードから「押す」という動作をさせる事は可能でしょうか?
385デフォルトの名無しさん:02/12/28 21:26
MACのエクセルVBAでメール送信できないのですが、
WINと同じようにApplication.SendMail recipient:="あどれす", subject:="件名"
では無理なのでしょうか?知っておられればどうか教えてください。
>384

開いてればね
387デフォルトの名無しさん:02/12/31 17:40
VBA で
Set obj = new MyClass
とかやったとき、必ず実行される C++, Java でいうところの
コンストラクタを探しているんですが、そーゆーのってないんでしょうか?

今は、 init ってサブルーチンを実行前に必ず動かして
お茶を濁していますが。
Set obj = new MyClass
obj.init ' ←コイツ
obj.XXX
2000だと無いんじゃない?
vbだけど.netでコンストラクタが用意されたとかえばってたくらいだから。

initializeイベントをデフォルトコンストラクタとして使うんじゃなかったかしらん?
>>378
VBAにいおけるコンストラクタ:
Private Sub Class_Initialize()
デストラクタ:
Private Sub Class_Terminate()
391387:02/12/31 19:30
>>388, >>389, >>390
ありがとう!
おかげで AssociatedArray クラスを作れたよ。
Perl の連想配列もどきを実現できました。
これで年明けに来る仕事こなせます。

initialize イベントの発動タイミングがいまいちわからないけど、
こっちの方もいろいろいじってみます。ありがとー。

# なんでこんな大切なものがヘルプで見つからないんだ(ブツブツ
392387:02/12/31 19:38
もうちょっとわかったので追記。

クラスモジュールを編集するテキストエディットコントロール(っていうの?
のすぐ上にある、 (General)を Class にして、その右にあるコンボボックスから
initialize を選べば自動でプロシージャが挿入されるんだね。
terminate も同様。すばらしい。

イベントの発動タイミングはデバッガで見ると、
Set obj = new AssociatedArray
だ。まさに、オブジェクトが作られたタイミングだね。すばらしい。
393デフォルトの名無しさん:03/01/01 14:17
>>391
連想配列もどきなら、Dictionaryオブジェクトでいいんじゃないのか?
あのヘルプは使えないね
395デフォルトの名無しさん:03/01/01 17:27
質問があります。
A,Bのブックがあり、それぞれデータを共有しながら単独で動きます。
一つどうしても共有化できなかったデータがありBで必要になったのでAをマクロ無効にしながら開いて参照したかったのですが
無効にする方法を見出せずにいます。
Openで開いても、GetObjectでインスタンスに乗せてもA側のWorkbook_Openイベントがfireされます。

マクロを無効にして他ブックを開きたいのですがどの様にしたら良いでしょうか?
別の方法を考えましょう
397395:03/01/01 17:51
>396
レスありがとう。
分かりました。Aの変更時と同時に他のリソースに書くことにします。
398デフォルトの名無しさん:03/01/03 12:07
クラスモジュールで this ポインタってあるんでしょうか。
文字列演算が多いので
MyString.create(str).func1.func2.func3.to_string
とかやりたいんですが。
399デフォルトの名無しさん:03/01/03 12:41
>>398
Me ?
400デフォルトの名無しさん:03/01/03 13:11
マクロ初心者です。
質問させてください。
 A B C D E F
1. リストNo 数値1 数値2 数値3
2. 1 0326 3124 0001
3. 2 0327 3125 0002
4. 3 0328 3126 0003
5. 4 0329 3127 0004
6. 5 0330 3128 0005

上記のような表があるとして、セルに記入された数値と一致する
リストNoのはいったセルをアクティブにする方法を教えてください。
F1に"3"と入れるとA4がアクティブになるような。

401398:03/01/03 13:57
>>399
Me ってうつと this ポインタになるのかと思った。
違うみたい。

...Me ってなんだ?
402sn00pie:03/01/03 14:18
>>400
VBA はじめたばかりの sn00pie です。
シートは1枚と仮定。
ガンバレ。とりあえずリファレンス買え。

Sub SelectAllSameValues(value As String)
 Dim cell As Range
 Dim rangeString As String
 rangeString = ""
 For Each cell In ActiveSheet.UsedRange
  If cell.value = value Then
   rangeString = rangeString + cell.Address(False, False) + ","
  End If
 Next cell
 rangeString = left(rangeString, Len(rangeString) - 1)
 Range(rangeString).Select
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 If Target.Address(False, False) = "F1" Then
  SelectAllSameValues Target.value
 End If
End Sub
403398:03/01/03 18:48
キーワード Me の使い方を教えてください。
クラスモジュールを追加して、
Option Explicit
Public Function returnMe() As Class1
 returnMe = Me
End Function
Public Sub printMsg()
 MsgBox "hell world"
End Sub
次に ThisWorkbook に
Sub testKeywordMe()
 Set obj = New Class1
 obj.returnMe.returnMe.returnMe.printMsg
End Sub
として実行できると思ったのに、できません。
ヘルプには Me が this である、という記述に見えるのに
どこが間違っているんでしょうか?
404400:03/01/03 19:29
>>sn00pie さん
わぁ こんなに早くレスもらえるとはおもってませんでした。
さっそくためしてみます。
ありがとうございました。
405398:03/01/04 00:10
Me を返す方法をずーと考え続けてました。
よーするに、Me は Function の戻り値として使えないみたい。
引数として他の Sub, Function に Me を渡すことはできるみたい。

もし、obj.func1.func2.func3をしたい場合は、
各メソッドでインスタンスを作り直す必要がある、と。

簡単なバッチ処理を行う分には Excel/VBA でいいけど、
大規模になるとつらそうだな。この言語。
ヘルプは見にくいし、エラーメッセージが婉曲っつーかなんつーか。
ちょっとしたこともトリッキーな手法にならざる得ない気が。

# 私は日曜プログラマですが、プロプログラマは大変だろうな。
406デフォルトの名無しさん:03/01/04 02:03
度々ここでお世話になっているものです。

今回は、グラフを作成する際の参照元データの指定法です。

一般的には、Range等を用いて、セル上の数値を元にグラフを作成しますが、VBAのマクロ内で計算した数値を格納した配列を直接渡したいのです。

どうすればいいかわかりません。SourceやRangeの関連は全部調べましたし、持っている5冊の参考書内でもいろいろ探してみたのですが、一向に見つかりません。

おながいします。
407デフォルトの名無しさん:03/01/04 07:00
>>403
Public Function returnMe() As Class1
 Set returnMe = Me
End Function
か?
408398:03/01/04 13:26
>>407
そうかリファレンスの代入だったのか。
「実行時エラー '91': オブジェクト変数または With ブロック変数の設定がされていません。」
ってときは Set 抜けの可能性ありってことですか。
・・・なんてわかりにくいエラーメッセージなんだろう。

Option Explicit
Sub ExecuteDemo()
Dim myStr As MyStringClass
 Set myStr = MyString.create("1234567890")
 MsgBox myStr.leftString(8).rightString(4).getString ' ==> MsgBox "5678"
End Sub

あとはインスタンスを作るときに引数を指定して渡せれば
MyString って標準モジュール(function create のみのモジュール)も書かなくて
すむが、これで当初の目的は達成です。ありがとー!
409406:03/01/04 20:35
>>406です。今日も1時間ぐらいいろいろと検索で探したのですが、
グラフのデータを配列で直接渡す方法が見つかりません。どなた
か名案をご存知でしたら、どうかよろしくお願いします。現時点
では、一時的にシート別位置にデータを吐き出して、それでグラ
フを作っています。どうしても配列から直接渡したいのです。よ
ろしくお願いします。
410デフォルトの名無しさん:03/01/04 21:33
くだらない質問だけど
VBAもVBA.NETになると思う?
>>410 らしいね。 VBAのエンジンとVB.NETのエンジンは共有にするそうだ
412398:03/01/04 21:53
>>409
なんでシートからグラフ作っちゃだめなんですか?
worksheet の visible で非表示でユーザに見えなくするとかは?
>>408
俺もあのエラーメッセージには泣いてる
414406:03/01/05 01:32
>>412
解決できました。汚いコードですがこんな感じです。要するに、文字列をこんな具合に作ってあげて、投げてあげればできます。

Public Sub CommandButton2_Click()
Dim co As ChartObject
Dim Y As Variant

i = 1

Y = "={"

While i < 5
Y = Y & S(i) & ","
i = i + 1
Wend

Y = Y & S(5) & "}"

Set co = ActiveSheet.ChartObjects.Add(10, 10, 300, 200)
With co.Chart.SeriesCollection.NewSeries
.XValues = Worksheets("Sheet1").Range("A2:A6")
.Values = Y
End With

End Sub
415391:03/01/06 14:36
今更ですが。

>>393
> 連想配列もどきなら、Dictionaryオブジェクトでいいんじゃないのか?

自作とどっちがいいか検討しました。自作の方がよさそうです。
(1) CreateObject ってラストに Nothing 代入しないとだめなのがめんどい。
(2) CreateObject だと継承できないのが痛いです。
どっちも Directory じゃなくて CreateObject のせいですが。
416デフォルトの名無しさん:03/01/06 19:57
とても困っております。質問させてください・・・
はじめからできているグラフにデータを貼り付けてファイルを作成しているのですが、
if データ系列に近似曲線がなかったらthen
処理をしない
endif
という処理をしたいのです。
グラフ自体から”データ系列に近似曲線がなかったら”という風に値が
返ってくる方法はないでしょうか?
グラフの数が多すぎ&元データの場所もバラバラなので、グラフごとの元データを
チェックするより、グラフに線がなかったら?と認識したいのです。
または「グラフの元データの範囲」の値を取得する方法はないでしょうか?
よろしくお願いします。。。
>>416
Sheets("Sheet1").ChartObjects("グラフ 1").Chart.SeriesCollection(1).Trendlines.Count
でいけるようです。
418416:03/01/06 21:24
>>417
こんなに早いレスありがとうございます!
さっそく試してみます。ありがとうございます!
419416:03/01/06 21:45
今試してみたのですが、グラフに線があるときはいいのですが、線が無い
時にゼロの値が返ってきません。Trendlinesプロパティを取得できませんの
エラーが。。。今はカウントを変数に入れてゼロだったら?のif文に
しているのですが、これがいけないのでしょうか?もう全然わかりませぬ。
>>419
そうでしたか?一度近似曲線を作って消してからならOKのようです。
今ちょっと確かめてみます。
421416:03/01/06 21:55
すみません。。
>>419
やってみました。近似曲線を作らなくても、系列番号をSeriesCollectionで
指定してやれば、Trendlines.Countはちゃんと0を返してくれました。

カウントを変数に入れてゼロだったら?の意味がよくわかりません。もう
少し詳しく教えていただけないでしょうか。
423416:03/01/06 22:00
GG = ActiveChart.SeriesCollection(1).Trendlines.Count
If GG = 0 Then
GoTo n1
End If
↑こんな感じです。使い方が間違っているのでしょうか??

>>423
別に間違ってないですねえ。もしかしたら系列が一つもないグラフを参照する
事もあるのですか?
425416:03/01/06 22:05
>>424
そうです、あります。。。場合によってはデータが空白の時もあるので、
そういう時はグラフには何も表示されないんです。
やっぱりグラフからっていうのは無理なんでしょうか?
>>425
ActiveChartがNothingの時はSeriesCollection以降を参照しないように
変更してみたら?
>>425
違った、SeriesCollection.Countが0でない時のみTrandlinesを参照するように
したらいいと思います。
こんな感じ。

If ChartObjects("グラフ 1").Chart.SeriesCollection.Count Then
Range("a1") = ChartObjects("グラフ 1").Chart.SeriesCollection(1).Trendlines.Count
End If
429416:03/01/06 22:20
なるほど!ちょっとやってみます!
430416:03/01/06 22:30
オブジェクトは、このプロパティまたはメソッドをサポートしていません
のエラーが出てきました。。。SeriesCollectionはオブジェクトを指定
しないと使えないものなのですか?
If ActiveChart.SeriesCollection.Trendlines.Count Then
だとこのエラーで、
If ActiveChart.SeriesCollection(1).Trendlines.Count Then
だと(1)の線がグラフにないので認識してくれません。
もう私のレベルでは対応できません。。。こんな私に親切に教えて頂けて
感謝感謝デス
>>430
もう少しですね。Trendlinesをいきなり参照してしまっているのでエラーに
なっているのだと思います。

1.SeriesCollection.Countの値をチェックする。
2.1.が0の時は何もしない。0以外の時に初めてTrendlines.Countを調べる。

のようにすればいいはずです。SeriesCollectionが0の時は、系列が一つも
ないわけですから、当然近似曲線もないはずですから。
>>430
If ActiveChart.SeriesCollection.Trendlines.Count Then
はエラーになります。
If ActiveChart.SeriesCollection.Count Then
でまずチェックして下さい。
433416:03/01/06 22:52
>>431
ありがとうございます!今このように
GG = ActiveChart.SeriesCollection.Count
If GG = 1 Then
やってみました。成功したと思ったのですが、なぜか近似曲線の無いグラフ
にまで1が入ってきたので調べてみたところ、このグラフは元のデータを
データ範囲からでなく系列のXの値,Yの値に直接入れているようで、
これはデータが入っていなくても系列がある事になってしまうんでしょうか?
>>433
If ActiveChart.SeriesCollection.Count Then
GG = ActiveChart.Chart.SeriesCollection(1).Trendlines.Count
If GG Then
近似曲線のある時の処理
End If
End If
のようにしてみて下さい。
435416:03/01/06 23:13
>>434
すみません。なんとお礼を言っていいか。。。
If ActiveChart.SeriesCollection.Count Then
GG = ActiveChart.SeriesCollection(1).Trendlines.Count
If GG = 1 Then
近似曲線のある時の処理
End If
End If
でやってみた所、GG = の所で引っかかりました。
SeriesCollection(1)が認識できないようです。
ここまで教えて頂いたのに申し訳ありません。。。
>>435
>>434に間違いがあり、
GG = ActiveChart.Chart.SeriesCollection(1).Trendlines.Count
ではなくて
GG = ActiveChart.SeriesCollection(1).Trendlines.Count
でした。
私の所ではこれでうまく動いているのですが・・・・・・
437416:03/01/06 23:34
なんででしょう・・・グラフ右クリックの元のデータのところをデータ範囲からでなく
系列のXの値,Yの値に直接入れているのは関係ないでしょうか?
こんなことでお手間をとらせてごめんなさい。。。
>>437
ソースがRangeでも、配列定数でも関係はないと思います。
どこが違うのかなあ?グラフは確実にActivateされてますよね?
439416:03/01/06 23:50
一応ActiveChart.ChartArea.Selectにしてます。
データがちゃんとあるところは大丈夫なのですが、
ない所になるとひっかかってしまうんです。。。
440416:03/01/06 23:53
こんなできる人が近くにいてくれればいいのになぁ。。。
あぁぁもうダメです。。。
441デフォルトの名無しさん:03/01/06 23:55
はじめまして、こんばんは。
唐突ですが、EXCELで3次元のモデルって、実現可能でしょうか?
ちなみにモデルの用途は熱解析です。(汎用ソフトがあるのは知ってます
が、事情がありまして。。。)
ご存知のかた、詳しい方、お願いします。
>>440
データがない時に引っ掛からないように、SeriesCollection.Countが0でない
事をチェックしているんですがねえ。うーんおかしいなあ・・・・
443きき:03/01/07 00:03
ああ
444416:03/01/07 00:22
>>442
ですよねぇ。。SeriesCollection.Countの値をSeriesCollection()の
()の中の引数にしてみたのですが、これもダメでした。SeriesCollection.Countは
データがあっても無くても1が入ってしまいます。でもTrendlines.Count
を実行しようとするとエラーに。。。ほかの方法を考えたほうがいいでしょうか?
長々考えていただいて申し訳ありません。
445デフォルトの名無しさん:03/01/07 19:50
質問させてもらいます。
ある文字列がアルファベットや数字、つまり"-"や"$"などの
記号を除いた半角英数字で構成されているかどうかを
確認するにはどうしたらよいのでしょうか?
446sn00pie:03/01/07 22:12
>>445
文字列を一文字づつ調べれば?
447デフォルトの名無しさん:03/01/07 23:59
お前のような脳機能低下野郎は初めてだよ。
秀丸で確認すりゃいいだろ!ボケ!

反論は認めんからな(秀丸で瞬時に確認出来るだろ。10Mのテキスト文字列でも
3分位で出来るぞ、バカ)。
>>446
回答ありがとうございます。
やっぱりそうするしかないんですね。
メールアカウントなどで記号が使えないものが多いから
既にそういうのを摘出する機能があると考えていたんですが。
まぁ、大した処理じゃないですけどね。

>>447
"Excel"でってことなんですけど。。。
質問の仕方が悪くてどうもすいませんでした。
449IP記録実験:03/01/08 21:33
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
450デフォルトの名無しさん:03/01/08 23:12
Excel 2001:macのVBで2バイトの文字コードから文字を得るにはどうすれば
よいのでしょうか?
シート上で
=char(9008)と入力するとJISコード表から"0"が表示されます。
VBAでMsgBox chr(9008)とすると、"0"ではなくコードと全く関係の無い
文字列が表示されます。
なにか方法はありますでしょうか?
よろしくお願いします。
IPだけ?
>>1
全レス?
>>445

正規表現使うとか、、
http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp

他にもFreeで正規表現を実現するコンポーネントもあるし
串対策は?
dカツには何ソースですか?
何ソースですか?
内部告発者=ディープスロートと言う
>323
立たなくなるのは大変危険かと思われ。
実は俺が本物のひろゆき
458IP記録実験:03/01/09 01:49
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
↓(´`c_,'` )プッ
大阪って何だよ
>>117
厨にはいいブレーキだろ
462デフォルトの名無しさん:03/01/09 10:19
.Chart.SeriesCollection().NewSeries.Values = Y
で元データを指定したいのですが、最大16個の数値しか指定できないので
困っています。これって拡張できないのでしょうか?拡張できないなら一
度セルに吐き出して、といったかんじでグラフを作成することになってし
まいます。これは避けたいのです。

このようにしてX軸Y軸のデータを指定しています。Xは16個以上でも指定
できるのですが・・・・・名案がありましたらお願いします。

Set co = ActiveSheet.ChartObjects.Add(10, 10, 300, 200)

With co
.Chart.PlotBy = xlRows
.Chart.SeriesCollection().NewSeries.XValues = X
.Chart.SeriesCollection().NewSeries.Values = Y
.Chart.ChartType = xlLineMarkers
.Chart.SeriesCollection(1).Delete
End With
ぴろゆき今日は早起きだな。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
1chみたいにログ流出だけは避けてくれればとりあえずはいいかなと。
しょうがないでしょう、このご時世。
466sn00pie:03/01/10 01:39
>>453
>正規表現使うとか、、
http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp

これなんですが、 Excel VBA で使えるんでしょうか?
このインターフェースなら是非使ってみたいんですけど・・。

>>445
もし正規表現ライブラリを使えるのならば、
ttp://www.din.or.jp/~ohzaki/perl.htm#Mail
これが使えます。

ただし、 Perl の正規表現ですので VBA の正規表現に書き換える必要が
あるはず。展開後の長ったらしい正規表現を再利用しようとせずに
自分でコードを組んで正規表現を生成しなおしたほうがいいよ。
467デフォルトの名無しさん:03/01/10 02:05
>>これなんですが、 Excel VBA で使えるんでしょうか?

Excel2000でだけど、Visual Basic Editorを立ち上げて、ツール->参照設定でMicrosoft VBScript Regular Expressions
を追加すると使えるようです。
>>521
素で選びましたが
な に
 
か?
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
>>26 今回のケースでは、
名誉毀損の書きこみがあったと認識し、または認識しえたとき。= 内容証明が届いた時

でしょ? いいたい事があるならはっきりと仰って下さい。
ヤブ医者をヤブ医者と言って何が悪いんだか。
少なくともその人はヤブ医者に感じたんだろうが。
それを開き直る根性が全く解せない。
大型連休に固定が消えるのはいつものこと(ひろゆき含む)
ITバブルの中で様々な幻想が語られた。

リアル経済ならぬバーチャル経済しかり。
ITによる失業者の吸収しかり。
「これからは2ちゃんねるの時代だ」のごとき匿名幻想しかり。

IT社会はリアルワールドにおける
信頼と責任抜きにはありえないというだけの話だ。

http://www.miyadai.com/message/?msg_date=20020713

>アクセスログってなに?

人を馬鹿にするな!
旺文社
国語辞典

若干(じゃっかん)
名詞・副詞
いくらか。少し。少々。


歪曲北朝鮮放送局が恐喝食中毒すし屋を第3位に。




 
>>356
( ´_ゝ`)フーン
スレタイの日本語、微妙におかしいね。
削除しなかったことが問題であって、IP取得は全くの見当違いだと思うんだが
それよかズボラな削除体制どーにかしろって感じだな

どさくさに紛れて都合の良い法律案を盛りこむ議会みたい
管理批判の多い板から記録してるっつーのもなんだかなあ
釣りじゃないのなら実に現実味のない意見だ
新しいスレ立てて議論してくれ。
スレタイと内容合わせようや。
484sn00pie:03/01/11 02:24
>>467
> Excel2000でだけど、Visual Basic Editorを立ち上げて、ツール->参照設定でMicrosoft VBScript Regular Expressions
を追加すると使えるようです。

あー。MS記事の中の参照がどうのこうのっていうのはそういう意味でしたか。
さっそく VBA で楽しい正規表現ライフを暮らそうと思います。ありがとー。
IPっていうのはプロトコルの名称であって、ちゅあんとIPアドレスと
表記しなさいってのは聞き飽きたよ
249 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:52 ID:rLfxQ17l
   >荒らしとか犯罪のためなの?
   そす。

246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV
   >ひろゆき
   俺のお気に入りのスレとか荒されてるんだがそういうのにも有効?

257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l
      いずれは。


 
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
IDやめて、ここにIPを表示してしまえ。
どこぞの宗教団体を批判するスレ・レス出現
  ↓
どこぞの団体が、管理人にスレ・レス作成IP教えろ
  ↓
管理人がIP教える
  │
  ├─────┐
  ↓普通     ↓異常
 裁判     VXガス

こうなるとオウムに個人情報を知らせ 大量殺人にまで発展した
TBSと同じになるな。 カルトは裁判を起こすことが目的ではなく
都合の悪い相手を特定して殺害することが
IPを得る真の狙いだから真実の書き込みができなくなる。

平和な日本の昼下がり、
創価学会脱税疑惑を追及した市議会議員が自宅の団地で家事をしている。
すると突然、自宅の窓から化け物のような歪んだ力で
あっという間に空へ丸投げされて落下死する。
団地の部屋はコンビニへ買い物に行っているかのように
台所も洗濯物も何もかもがそのままの状態だ。
地元警察は創価学会と数日前から綿密な口裏合わせがあったかのように
他殺を自殺と決め付けてろくな捜査も現場検証もせず引き上げる。
http://www.sokamondai.to/

ちなみにフランス内務省は最高危険度カルト教団として
日本の創価学会を公式に認定した。
フランス政府公認のカルト教団と正義のために
たった一人実名で全面対決した市議に黙祷( ‐人‐ )
2ちゃねらーはプロバイダー責任法案を
国会で通過する前に反対しておけばよかったのに。
私は反対したが力が足りなかった。
かわってないよ。なにいってんだよ。
前スレで始めての1001Getを狙ったんだが、思ったほど終盤の勢いがなかったな
はじめまして 質問があります
テキストファイルから読み込んで下記のような表を作らなければならないのです
       文学部 工学部 理学部 法学部 医学部 合計
1.男性
2.女性
  無記入

コードは 文学部:1 工学部:2 理学部:3 法学部:4 医学部:5 
      男性:1 女性:2 無記入:空白 です。
これの学部ごとの性別の人数と合計をだすプログラムの例を教えて欲しいです
文学部、男性等の文字は初めから入力されているので数字だけが出るプログラムを
希望します。
テキストには一行目が学部、二行目が性別のコードになっています
例 11
21 
52
4
11
    ・
   ・
よろしくお願いします
493492:03/01/11 15:14
うわっずれた
最後の例はコードの並び方で
11
21
52

11


こういう風に並んでいるということです
ひろゆきがこれなくなるじゃないか!
俺はひろゆきにレスされたいんだよ!
国内サッカー板 また落ちてます?
殺人予告スレ発生。

【予告】小学生の登校を狙って・・・
http://live2.2ch.net/test/read.cgi/news/1042035002/

悪戯であることを祈る。
497ケン:03/01/11 23:54
エクセルに取り込んだ画像の色のデータを取得する方法が、VBAに
あるのであれば、教えてください。
たとえば、取り込んだ画像の、上から20ポイント左から20ポイント
の位置にある、ドットの色が黒であれば、1を返してくるような
プロパティーがあれば、教えてほしいのですが・・・
まだ心臓がドキドキしてるぞ馬鹿
>>497
Win32APIのGetPixel
500492:03/01/12 07:14
お願いします・・・
誰か助けてください・・
>500
漏れだったらこんな事だったらVBA使わない。
テキストを貼り付けて区切り位置ウィザードで別フィールドに整形してから
DSUM関数で集計する。
>501
DCOUNTだわ、スマソ。
503492:03/01/12 07:59
>>501
レスありがとうございます
でもこの課題はVBAプログラムで書いてこいと言われたんです
Do..Loopステートメントを使うみたいなんですが・・
重ね重ねすいません
払チ托イ
ということはなにか固定のほとんどは地方出身だということか。
>>503
ほい出来たぞ。久しぶりにBASICなんか組んだよ。

Open "InputData.txt" For Input As #1
Do
If EOF(1) Then Exit Do
Input #1, i$
Row = Mid$("BCDEFG", Val(Left$(i$, 1)), 1)
If Len(i$) = 1 Then
Column = "4"
Else
Column = Format$(Val(Right$(i$, 1)) + 1)
End If
Range(Row + Column).Value = Range(Row + Column).Value + 1
Range("G" + Column).Value = Range("G" + Column).Value + 1
Loop
Close #1
507デフォルトの名無しさん:03/01/12 12:27
>>503
そうそう、2chに書き込んであるデータは行末尾に空白が一個入るから、
データをコピペする場合空白は削除しておいてね。
508492:03/01/12 14:16
>>506
ありがとうございます!!
これで留年免れた・・
509デフォルトの名無しさん:03/01/12 14:54
>>492
努力しろや。留年したほうがまし。
個人的意見ですが。
510デフォルトの名無しさん :03/01/12 15:07
>>492
うわー。こんな問題も分からんのか......
退学すれば?諸悪の根源だよ。
511デフォルトの名無しさん:03/01/12 15:21
>>506
>If EOF(1) Then Exit Do
のEOFってどういうことなんですか?
どういうときに使うんですか?

512デフォルトの名無しさん:03/01/12 15:23
ファイルの終わりがきたらってことだ
>>511
入力するデータがなくなったら、DO...LOOPを抜けるために入れてあります。
514511:03/01/12 15:27
>>513
ありがとうございます。
ちなみに
DO Until EOF(1)
....
LOOP
とすればIf文を一個減らせます。
516sn00pie:03/01/12 16:19
>>506
なんで Format$(Val(Str(XXX))) を使うんだろう。
Format って日付の形式指定ですよね?
ならば Str(XXX) のままでいいと思う。

# VBA って sprintf 系の関数がなくてめんどいと思う今日このごろ
>>516
Strを使うと、先頭に不要なスペースが一つ入ってしまうので都合悪いのです。
518???:03/01/12 16:21
たまに、「SASなんぞ知らないぞ。そんな糞言語だ。」っていう人がいますが、
なぜ、SAS言語がくそと呼ばれるのですか?
結構金融機関で使用しているところがあるのですが、
ほかの言語とどう違うのですか?
具体的に教えてください。マジで。
519デフォルトの名無しさん:03/01/12 16:22
http://profiles.yahoo.co.jp/moekosanjp
★私とチャットしませんか?★
520sn00pie:03/01/12 16:43
>>517
空白除去でしたら Trim がありますよん。
521sn00pie:03/01/12 16:46
Property Get item(key as String, value as Variant)
Property Let item(key as String)
Property Set item(key as String)
を同一クラスに実装しようとしたらできなかった。
できないものらしい。気づくのに1時間近くかかった。はぁ〜。(タメイキ
あ、オーバーロードできないっけ。
デフォルト引数はなかった?
523sn00pie:03/01/12 20:26
>>522
僕のコメントについての発言ですか?
デフォルト引数があるか・・・?どういう意味でしょうか?
800!!
結局はまたループ・・・
526sn00pie:03/01/12 20:41
ごめん。 >>521 についてですけど、今やったらできた。
さっきはなんでできなかったんだ。
.xls ファイルを再読み込みで変わるのか?ワカンネ
get, set, let 全部できました。ガセ流してごめん。

Sub PropertyDemo()
Dim obj As New Class1
Dim value As Variant
obj.item("abc") = obj
Set obj.item("abc") = obj
value = obj.item("abc")
End Sub
大分かかる
528Win2k SP3, Excel2000:03/01/13 14:39
VBEで検索する際に、検索文字列に漢字を入力しようとすると、変換が確定した時点
で文字化けしてしまいます。これってMSのバグ?
529528:03/01/13 14:40
IMEはMS-IME2000です。
530デフォルトの名無しさん:03/01/13 16:10
531山崎渉:03/01/13 18:30
(^^)
掲示板の書き込みを鵜呑みにするやつはもっと悲惨だよ
533528:03/01/14 09:55
>>530
ここにも貼って頂いて、、、どうもありがとうございます。助かりました。
534山崎渉:03/01/15 17:50
(^^)
535デフォルトの名無しさん:03/01/17 02:21
 あらかじめ指定しておいたテキストファイルに、
表示されているエクセルデータを書きたして行くにはどうしたらいいのでしょうか・・
よろしければどなたか・・
536sn00pie:03/01/17 11:11
>>535
指定するテキストファイルの中のデータを読み込み専用で開いて、データを読み込んで、閉じて、
書き込み専用で開いて、データを書きこんで、エクセルデータを書き込んで、閉じる。
最短とか、最良を選ばなくていいなら、これで十分だよね。

データの読み方はこのスレで紹介済みだよ。書き方も似たようなものだと思う。
何で悩んでるの?
537ゆみこ:03/01/19 17:47
VBAのことでわからないことがあり書き込みします。困ってる内容はエクセルで記録したマクロ↓に ファイル選択などのループ処理を加えたいのですが どうもよくわかりません どうかあたしを助けると思ってお願いしますm(_ _)m
Sub Macro1()
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:\0115backup!\+00\u+00\-27u+00.txt", Destination:=Range("E2"))
.Name = "-27u+00"
 .FieldNames = True         .RowNumbers = False
 .FillAdjacentFormulas = False   .PreserveFormatting = True
 .RefreshOnFileOpen = False     .RefreshStyle = xlInsertDeleteCells
 .SavePassword = False        .SaveData = True
 .AdjustColumnWidth = True      .RefreshPeriod = 0
 .TextFilePromptOnRefresh = False   .TextFilePlatform = 932
 .TextFileStartRow = 1         .TextFileParseType = xlFixedWidth
 .TextFileTextQualifier = xlTextQualifierDoubleQuote  .TextFileConsecutiveDelimiter = False
 .TextFileTabDelimiter = True     .TextFileSemicolonDelimiter = False
 .TextFileCommaDelimiter = False    .TextFileSpaceDelimiter = False
 .TextFileColumnDataTypes = Array(9, 1)  .TextFileFixedColumnWidths = Array(12)
 .TextFileTrailingMinusNumbers = True   .Refresh BackgroundQuery:=False
End With
End Sub
↑このマクロの中で"-27u+00.txt"のところの-27を(-30〜+30)に、E2を(B2〜BJ2)に選択ヶ所の番号をループ的に順番に選択させて,処理をループ処理にしたいのですが。。。 本当によろしくお願いしますm(_ _)m
538さちえ:03/01/20 15:54
ついでといってはナンですが、わたしにも教えてくださぁい

Excel2000で2つのブックを開いていて、どっちにも複数のシートがあって、
シート名は重複してません。で、今注目したいブックが下にきているとき

Function GetSendStatus() As Integer
GetSendStatus = Worksheets(sheet_setting).Range("B43").Value
End Function

みたいなコードのところで「エラー9・インデックスが有効範囲にありません」が
発生します。
今操作中のブックにsheet_settingというシートがないゆえだと思うんですが
ブック名まで指定しないとダメなんでしょうか?
>537
もーちっと見やすく書けや。
540U ◆CZtFsGiu0c :03/01/20 17:11
>>538
そのFunctionはどこに記述されているんですか?
対象のブック内に記述されているのであればThisWorkbookでそのブックを
指定できますが、そうでないとすると、対象となるブックを特定する情報
が必要になるでしょう。
541さちえ:03/01/20 17:55
>>540

 ☆ゴン
|/
|( `Д´)ノ アイター!
|<(  )へ
|  >

そうだ、こんなときにこそ ThisWorkbook. を使えばよかったんですね!
バカだ・・・わたし・・・

いやいや、ありがとうございました!
すみません。
PostgresのデータをExcelに落としたいのですが、
どうすればよいか、書いてある本をご存知の方
いないでしょうか。
ご存知でしたら教えてください。
お願いします。
>>542
MySqlに汁!
>>543
MySQLならできるのでしょうか。
>542
適当にサンプル。Postgres使っていないから分からんが、こんなのでいけるんじゃないのか?
ODBCは配布してるサイトから拾ってくる事。

Private Sub Connection_Test()

Dim cnList As New ADODB.Connection
Dim cmList As New ADODB.Command
Dim rsList As New ADODB.Recordset
Dim sConnectionString As String

sConnectionString = "driver={PostgreSQL};server=(local);database=testdata;uid=saUser;pwd=;"
cnList.ConnectionString = sConnectionString
cnList.Open

cmList.ActiveConnection = cnList.ConnectionString
cmList.CommandText = "SELECT * FROM tblSample ORDER BY ID"
Set rsList = cmList.Execute()
Range("A2").CopyFromRecordset rsList

rsList.close
cmList.close
cnList.close

End Sub
546542:03/01/21 06:15
>>545
詳細なコードまでありがとうございます。
なんだかいけそうです。
昨日までの鬱な気持ちがいっぺんで晴れました。
547デフォルトの名無しさん:03/01/21 21:14
質問です。あるシートで、以下の関数を実行します。

'CommandButton1〜5を作成する関数
Public Sub t()
  Dim i As Integer

  ActiveSheet.OLEObjects.Delete

  For i = 1 To 5
    Call ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1")
  Next i
End Sub

するとCommandButton1〜5が生成されます。それからもう一度実行すると、
CommandButton1,6,2,3,4が生成され、その次はCommandButton1,5,6,2,3が生成されます。
なぜこのような結果になるのか知りませんか?
想像では、オブジェクトの破棄している最中に生成しようとしたからだと思うんですが・・・
意図したとおりに生成される方法を教えてください、おながいします・・・
548デフォルトの名無しさん:03/01/22 00:37
ForNextでウエイト入れてみてはどうか
エクセルって計算ソフトなのに、高精度の変数使えないVBAでマクロ
書くってのはどうかしてるな。
550自称「脳内SE」:03/01/22 02:28
>549
それでC++ソースも生成してますが、何か?
551デフォルトの名無しさん:03/01/22 02:34
とあるCADの簡易機能を移植しようとしてVBAを使用。
データベースに基づいてEXCEL上で数千本のLine描画は
厳しいんでしょうか?凄く遅くなりました。
552sn00pie:03/01/22 21:23
>>549
高精度の変数使わない処理ならば良い。
VBA でひとつのテンプレシートから50枚のシートを自動生成しました。
必要なら高精度ライブラリ作れw

ネタニマジレス
マタニネジレス
高精度の変数ってなんのこっちゃいな
555世直し一揆:03/01/23 00:33
<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙され
るな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ、自己中心)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとす
る(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際には
たいてい、内面的・実質的に負けている)
●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本
の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く
、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、人の目を異常に気にする(「世間体命」、「〜みたい
」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度
も言ってキモイ)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は
個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬
する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男
前やのに、なんでや!(あいつの足を引っ張ってやる!!)」)
556山崎渉:03/01/23 20:01
(^^)
質問です。以下のコードをサイトから拾って来まして、
UserForm1にCommandButtonを5個作ってmacro1から呼び出す様にしたかったんですが
実行時エラー'424': オブジェクトが必要です。
と出ます。分かる方がいらっしゃいましたらアドバイスお願いします。

'UserForm1モジュール
Option Explicit
Option Base 1

Dim myClass1(5) As New Class1

Private Sub UserForm_Initialize()

  Dim myCmdBtns As New Collection
  Dim i As Integer
  With myCmdBtns
    .Add Item:=CommandButton1
    .Add Item:=CommandButton2
    .Add Item:=CommandButton3
    .Add Item:=CommandButton4
    .Add Item:=CommandButton5
  End With

  For i = 1 To 5
    Set myClass1(i) = New Class1
    With myClass1(i)
      .Cmd = myCmdBtns(i)
      .Index = i
    End With
  Next
End Sub
続きです。上で言い忘れてましたがClass1モジュールも作って以下を書き込んでます。

'Class1モジュール
Option Explicit

Private WithEvents myCmd As MSForms.CommandButton
Private m_intIndex As Integer

Public Property Get Cmd() As MSForms.CommandButton
  Set Cmd = myCmd
End Property
Public Property Let Cmd(ByVal cmdNewValue As MSForms.CommandButton)
  Set myCmd = cmdNewValue
End Property

Public Property Get Index() As Integer
  Index = m_intIndex
End Property
Public Property Let Index(ByVal intNewValue As Integer)
  m_intIndex = intNewValue
End Property

Private Sub myCmd_Click()
  MsgBox "クリックしたボタンはCommandButton" & m_intIndex
End Sub

Sub macro1()
  Show.UserForm1
End Sub
559デフォルトの名無しさん:03/01/24 18:11
失礼。あげさせて頂きます。
いやだー、スカート捲らないでよー、サイテーー
>>557-558
Excel2002で動かしたらちゃんと動きましたよ。
>>561
ご回答、ありがとうございます。
動きますか・・・私のは何故動かないのだろう・・・。
Excel2000でも動きますよね?
>>562
した事は、macro1をSheet1に置き、UserForm1にコマンドボタンを5つ作成し、
UserForm1モジュールをUserForm1のマクロに置き、クラスモジュールを
作成してClass1をコピペ、macro1を実行しただけです。
>>563
Sheet1と標準モジュールの違いはありますが、あとは同じ様にやっているんですけどね。
(試しにSheet1にmacro1を置いて実行しても、結果変わらずエラーでした)

動く事だけ分かっただけでも大きな収穫です。
もう一度やり直してみたりExcel2002上で試したりしてみます。

ありがとうございました。
手元にExcel2000置いてないので試せないんですよ。
2000と2002で何か違うのかな?
566557:03/01/24 19:29
>>565
違うのかもしれませんね。
明日か明後日Excel2002を使う機会がありますので
試してみます。
コマンドボタンやコンボボックスを、プログラムで自動作成する
やり方ってありますか?例えば、なにかのアクションを起こした
ときに、自動で任意の大きさ、場所へコマンドボタン等が自動で
シート内へ貼り付けれるようなカンジで。
568デフォルトの名無しさん:03/01/25 11:59
あらかじめ作っておいて必要に応じて表示したり隠したりリサイズしたり
って方法ならありかと
569デフォルトの名無しさん:03/01/25 12:00
http://homepage3.nifty.com/digikei/ten.html
(*~ー゜)ノ ・・・・・心温まるの〜
570557:03/01/26 01:04
>>565
Excel2002でうまく動く事を確認しました。
というか試している過程で気づいたのですが、単なるコピペミスの可能性が大で
Excel2000でも動くような気がしました。どうもありがとうございました。
>>570
動いてよかったですね。
Excel2000でもこのプログラムを見る限りは動くような気がします。
572557:03/01/26 01:50
>>571
ありがとうございます。
これ(オブジェクトの擬似配列化)を見つけた時は目をキラキラさせて喜んだもんで
早速月曜日に会社で試したいと思います。
シートの文字列をハイパーリンク化する命令はどう記述すればいいの?

シート ×
セル内の ○
でした。
>>573
「マクロの記録」をすれば一発で分かるけど

Range("A1").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="http://2ch.net/"
>>575
あ!できた。
どうもです〜。
誰か272にいちようツッコミを入れてあげてください
セルの計算式の話なんだが、ユーザ定義ワークシート関数(VBA)の中で
Range.Find()が動かない。NT4のOfficeは97。
・・・・・2000でXPだと動くな。ただのバグか。

あと、VBAではないんだが=COUNTIF(A1:A500,"<>0") としていると、
途中のセルをClearContentsしても数が変わらない・・・
(※delキーでクリアしても確認できる)
2000+XPでも再現。<>は駄目なのか?
初回とかは成功するから性質が悪い。
=COUNTIF(A1:A500,">0")+COUNTIF(A1:A500,"<0")
に置き換えることにしたが、顧客側担当者と二人で頭抱えたよ・・・
数十もあるブックで、どれくらい気付かずに使ってるか知れたものでは
ないから。
579デフォルトの名無しさん:03/02/06 11:18
すいません
どなたか教えてください

EXCELVBAで例えばユーザが引いた罫線が
メニューのセルの書式設定からひかれたものか、
罫線パレットからひかれたものか
判断するようなことってできませんか?

要はユーザの操作がしりたいんですが
できませんかね
今、自分が開いているエクセルのファイル名の取得って
マクロでどうやるんですか?
>>580
ThisWorkbook.Path
ThisWorkbook.Name
>>581
ありがとう!助かりました。感謝
583デフォルトの名無しさん:03/02/07 21:16
質問です。VBAでXMLファイルを読み込みたいのですが、DOMとかって使えるのでしょうか?
詳しく書いてあるサイトか本があったら教えてもらえないでしょうか?
よろしくお願いします。
585正規分布:03/02/08 01:46
2変量標準正規分布の積分をマクロでするにはどうしたらいいのでしょうか?

たとえば、[-1,2]×[3,4]の場合を教えてください。
質問です。
たとえば、列A1からA10まで値が入ってるとします。
そして、B1からB10にはA1からA10までの値を参照してるとします。
そこで、A11に値が新たに追加された場合、B11にも自動的にA11の値が
入るようにするには、どう書けばよろしいですか?
>>586
横着しない
588デフォルトの名無しさん:03/02/09 19:12
>>586
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ActiveCell
   If .Column = 1 Then
    .Offset(-1, 1) = .Offset(-1).Value
   End If
  End With
End Sub
589586:03/02/09 19:39
>>588
ありがとうです!(謝謝
590南斗水鳥拳のレイ:03/02/09 23:23
>>585

>2変量標準正規分布の積分をマクロでするにはどうしたらいいのでしょうか?
>たとえば、[-1,2]×[3,4]の場合を教えてください。

を答えられる人いないの?
漏れは、多変量解析と積分という分野なんでパス!数学板行ったら〜?
とか思った。けど、実は簡単だったりしたら恥ずかしいので黙ってた。
マクロを記録する…って答えじゃダメでつか?
>590
質問が漠然としすぎ。
これに(労せず)答えるには
1.2変量標準正規分布
2.excelの組み込み関数(に1関連のものがあるかどうか)

の両方を知っていないと逝けない。
585が何をどこまで知っているのか(知らないのか)
わからんのだから591のように様子見だろ。
例えば

/*
2変量標準正規分布の積分を求める方法を教えてください。
1変数の場合はNORMSDISTというワークシート関数があるのですが
2変数版が見つかりません。マクロを自分で組まなければいけないようですが
どうしたらいいでしょうか。
*/

くらい書いてあれば、もし関数があって詳しい人が居たら即答してくれるし、
なくて自作ということになれば「数値積分でググレ」くらいの答えは返ってくるよ。

とにかく585だけじゃVBA自体は触っていても数値積分のアルゴリズムが解らないのか、
マクロって何?なのか、そもそも正規分布からしてよく解らんのか、全然見当つかないもの。
594南斗水鳥拳のレイ:03/02/10 23:48
質問はまさにこんな感じです(コピーしただけ)。


2変量標準正規分布の積分を求める方法を教えてください。
1変数の場合はNORMSDISTというワークシート関数があるのですが
2変数版が見つかりません。マクロを自分で組まなければいけないようですが
どうしたらいいでしょうか。
だ〜か〜ら〜
数値積分でググレ
597南斗水鳥拳のレイ:03/02/11 00:15
>>596
どうやって?それを教えて。
……だからね、
>VBA自体は触っていても数値積分のアルゴリズムが解らないのか、
>マクロって何?なのか、そもそも正規分布からしてよく解らんのか、全然見当つかないもの。

小学生に説明するのと高校生に説明するのとじゃ教え方からして違うでしょ?
597は単にgoogle知らないとかいう話ぽ

ttp://www.google.com/intl/ja/
600南斗水鳥拳のレイ:03/02/11 00:30
>>598
アルゴリズムは、わかりやす、マクロもわかりやす。
601南斗水鳥拳のレイ:03/02/11 00:31
>>598
アルゴリズム、マクロもわかります。
あなたの精一杯の高度な説明求む。
>アルゴリズム、マクロもわかります。
それって既に問題解決してないか?
603南斗水鳥拳のレイ:03/02/11 00:40
>>602
マクロで書いてみてよ!
ごめんなさい、漏れの手に余ります。
頑張って自分で書くか、誰か他の人に当たってください。

すまないねぇ、でかい口叩いておいて……(w
まあここまで厨丸出しだと普通は逃げるわな(藁

おおかた期末のレポート課題を丸投げしたんだろうけど、
出来る限りの努力をするという意志がまるで感じられん。
ソースを全部人に書かせてそのまま提出しようと必死ぽいところが笑えるな。
606南斗水鳥拳のレイ:03/02/11 01:10
>>604
いいえ、とんでもありません。
誠意のあるコメントありがとうございました。
実は、SASでは2重積分していますが、エクセルでどうやってやるのかな
って思ったので・・・。
実際、周りの人は、エクセルしか使わないので、SASでプログラムしても
使ってもらえない→自分の所に、くだらない計算が回ってくる
ってな感じでして・・・。

いや、ほんと、ありがとう。
607南斗水鳥拳のレイ:03/02/11 01:27
>>650
君に一歩遅れて、書き込んだんだけど、
あまりに的外れ!
それから厨房(中学生坊主)って言葉で片付けるのは
ちょっと安易なんじゃない?ふふ・・。
608南斗水鳥拳のレイ:03/02/11 01:28
>>650
でなくて、
>>605
の間違いでした。
>実は、SASでは2重積分していますが、エクセルでどうやってやるのかな
って思ったので・・・。

最初から書けやゴルァ(゚д゚)
610南斗水鳥拳のレイ:03/02/11 02:12
>>609
まあまあ、落ち着いて!
許して ちょんまげ!
お聞きしたいことがあります。

ブラウザからエクセルにリンクを貼り、クリックするとエクセルを起動させます。
マクロは自動実行でCSVファイルをオープンし、処理して結果を画面に表示させる。
ということをやっているのですが、
ブラウザから起動したエクセルではCSVのオープン処理でエラーとなってしまいます。
ブラウザのウィンドウ内にエクセルとCSVの2画面を開けないためかと思われます。

CSVをオープンさせる方法、またはそれ以外の方法をしっていらっしゃる方がおられましたら
是非お教え下さい。宜しくお願い致します。
612デフォルトの名無しさん:03/02/11 16:12
エクセルマクロから、VBで作った他のアプリケーションの sub を起動したいのですが、
どうやったらできるのか解りません
(VB側のアプリは事前に起動している前提です)
ご存知の方、よろしくお願いします
他のアプリはオートメーションオブジェクトOtherAppになっているという前提だけど、

Dim obj As OtherApp
Set obj = CreateObject("OtherApp.exe")
obj.OtherAppSub
ActiveX DLL プロジェクトならば

[SeqNumber.cls]
Option Explicit
Private Number As Long
Private Sub Class_Initialize()
Number = 0
End Sub
Public Property Get NextNumber() As Long
Number = Number + 1
NextNumber = Number
End Property
Public Property Get CurrentNumber() As Long
CurrentNumber = Number
End Property

とか作って、Excel側からは

Dim seq As New SeqNumber

というように使用すれば良いので CreateObject なんか使わなくて良い。
あ、Excelでは参照設定で設定しておく必要がある。
616612:03/02/11 20:48
ありがとうございます
知識不足で、解らない単語が色々でてきたので、
参考にさせてもらいながら、がんばってみます
また、つまづいたら教えてください
617デフォルトの名無しさん:03/02/11 23:48
すいません、アドバイス御願いします。
今までexcel2002に市販アドインの体験版を入れて使用していたのですが、
それをアンインストールしたいと思っています。
このアドインは常にツールバー上に表示されています。
アドイン本体を削除すると、excelが立ち上がるたびにロードできないというエラーメッセージが出てきます。
excelの設定でアドインの読み込み情報はどこに記録されているのでしょうか?
レジストリを検索したりしてみたのですが見つかりません。
詳しい方教えてください。
618なつみ:03/02/12 00:38
sheetAにデータの一覧があります。
sheetAのB列に都道府県のフィールドがあります。
そこで、sheetAにデータを入力後、"東京都"だったら
その行を丸ごとsheetBへ、"埼玉県"だったらsheetCへと振り分け
たいのです。sheetAのデータをすべて都道府県別に振り分けて
いきたいんです。それをコマンドボタンを作ってVBを記述
したいのですが、どのような記述をすればよいですか?(TT)
ちなみにボタン一つおすだけで、データの振り分けをしたいので
すがなにかいい方法をご教授ください。
>>618
ボタンの中の人に聞けよ。
620名無しさん@そうだ選挙にいこう:03/02/12 01:23
いい方法?あんたは1つでも方法を見つけたのか?
何も考えずに教えろって書いてんだろ?

なつみ、風俗嬢にでも転職しな。
621デフォルトの名無しさん:03/02/12 01:26
どうしてそういう態度なんでしょうねえ(w
解らないからカッカしてるんでしょうか(w
622デフォルトの名無しさん:03/02/12 01:54
>>618
47都道府県のシートが全て揃ってるの?
623なつみ:03/02/12 02:01
>>622
すべてはそろっていませんが、半分ぐらいそろっている感じです!
>>617
「ツール(T)」メニューの「アドイン(I)...」は見たか?
625デフォルトの名無しさん:03/02/12 02:21
>>623
無いシートは作成するの?
それとも、データが存在するシートは揃ってる?
626なつみ:03/02/12 03:56
>>625
はい、データが存在するシートはすべてそろえてます。
627デフォルトの名無しさん:03/02/12 04:11
http://6530.teacup.com/test1/bbs
掲示板作ってみますた
628デフォルトの名無しさん:03/02/12 08:11
ActiveXのコントロールをシートに直接貼り付けたいのですが、方法がわかりません。
教えてください、よろしこ。
Set xl = CreateObject("Excel.Application")
xl.Visible = True
xls.WorkBooks.Open "xxx.xls"

とVBScriptで書きました。

マクロ自動実行の Sub auto_open() が走りません。
どうすれば自動実行できるようになりますか?
630629:03/02/12 15:44
すいません、できました。失礼しますた(汗
631Excel VBAに関する質問ていうか:03/02/20 17:48
Excel 2000 SR1で複数シートとVBAでシステムを作ってたんですが、
最近Excelを終了しようとしたら落ちるようになりました。

Application.OnTime でタイマーを使うようになってからなのか他の事情か、
原因はわからないのですが、最近になってエラーが。

で、ついに今しがたファイルが開かなくなりました。
ファイルを開くと、開いた後に砂時計になり、エラーでExcelが異常終了します。

このファイルはもう開けないのでしょうか?(T_T)
マクロを無効にすればシート自体は開くので、VBAのコード部分が破損したのかなぁ・・・
632Excel VBAに関する質問ていうか解決:03/02/21 10:53
破損原因はわからないものの、一応解決しました。

マクロを無効にして開けばファイル自体は読み込めるようです。
読み込んだらVB Editor画面ですべてのモジュールをコピーしました。

別のシートをマクロ有効にして読み込もうとするととたんに落ちるので
結局、VBAの初期化に関する部分が腐ってしまったのかなぁ・・・という感じです。
もしもし、個人用マクロブック(XLStartフォルダのxls)とかアドインは確認した?
使っていないならば関係無いが、こいつらは自動的に読み込まれるから、
壊れると何を開いてもエラーになるよ。
634デフォルトの名無しさん :03/02/22 19:13
エクセルシートに表があるとして、データをキーボードで入力します。
しかし、入力値は「コード」や「商品名」などの定まった値で変化の無い
場合があります。ここに間違えて入力するのを防ぐために各セル(行数は
入力データ量によって変化)にドロップダウンリストを表示させ、そこから
選択させたいのです(オートフィルタみたいに)。リストに無い場合は
手入力優先になる必要があります。

まったく対処方法がわかりません。ポインタだけでも教えてください。
お願い致します。
635デフォルトの名無しさん:03/02/22 19:21
636Excel VBAに関する質問ていうか解決:03/02/22 19:22
>>633

ご指摘ありがとです。XLStartには何も置いてません。
ひと世代前をタネにして、モジュールテキストをコピペして
難を逃れますた。

>>634

ドロップダウン(=リストボックス)を使いたいのであれば、リストボックスを
ベタベタ並べるとメンテナンス性が下がってしまうですよ。

入力のための行とデータが並んだ表をわける(入力ごとにVBAでコピペする)とか
してはいかが?
>>635
うわ、そのほうがはるかにシンプルだった・・・・
638634:03/02/22 19:33
>>635
回答して頂き有難うございます。EXCEL2000と2002を使っています。
回答の指示に従いますと、参照セルのデータ以外が入力できません。

>リストに無い場合は手入力優先になる必要があります。
の条件が満たせません。

また、シート全体をクリアするとリストに何も表示されなくなります。
開くエクセルブックに手を加えないようアドインで実現したいのです。

実例とは言わないまでも、こうすればいいのでは?といった指南を
お願いいたします。
639Excel VBAに関する質問ていうか解決:03/02/22 19:35
>>638

VBAは使わないの?
640634:03/02/22 19:37
よく考えるとセルに表示させたいのは
リストボックスではなくてコンボボックスでした。
641639:03/02/22 19:44
>>640 >>634
俺のお気に入りの方法で言えば、

Application.OnKey("{ENTER}", 入力チェック関数名)
でEnterキーをフックする方法がいいです。

入力チェック関数名() では、セルに入力されたのが規定のコードかどうかチェックし、
規定外ならエラーを出すとかしてるよ。
642634:03/02/22 19:51
>>641
んんん?
それだとエクセルブックに依存しますよね。それは駄目なので
アドインにする必要があるのです。選択する項目はINIファイルに登録して
GetPrivateProfileStringで読み込もうかと考えています。
要はそれをコンボボックスに表示させる方法について悩んでいます。

>Application.OnKey("{ENTER}", 入力チェック関数名)
>でEnterキーをフックする方法がいいです。
矢印キーでセル移動する場合も考えるのでその方法は採用できないのです。
すいませんが。
643639:03/02/22 19:55
>>642

あぁ、なるほど。
では識者のコメントを待とう。
644634(957):03/02/22 20:00
誤)要はそれをコンボボックスに表示させる方法について悩んでいます。
正)要は入力候補のデータが格納されたコンボボックスを、データ入力
  されるべきセルに表示させる方法について悩んでいます。
Aの列に単語を書いていきBの列にAの列の単語の組み合わせで
文字列を表示するのはどうしたらよいのでしょうか。
646デフォルトの名無しさん:03/02/25 01:55
Excelシート上ののAの列に単語を書いていきBの列にAの列の単語の
組み合わせで文字列を表示するのはどうしたらよいのでしょうか。
よろしくお願いします。
647デフォルトの名無しさん:03/02/25 01:56
二重カキコすいません。
648デフォルトの名無しさん:03/02/25 02:03
>>645
意味がよくわからん。
もっと具体的に説明してくれ。
>>648
レスありがとうございます。
ワークシート上のAの列に
hoge
excell
vba
とかくとBの列に
hogeexcellvba
hogevbaexcell
excellhogevba
.
.
.
等とすべての組み合わせを表示させたいです。
650デフォルトの名無しさん:03/02/25 03:18
>>649
A列のデータ数は不規則なのか?
2個だったり100個だったりする?
>>650
はい、そのときによって個数はかわります。
個数は Application.CountA で取得できそうだ。
問題は順列生成だな。総個数は Application.Fact で
求められるとして、順列か。うーん面倒くさい。
データの入力規則でプルダウンメニューを作りたいのですが、
最小値が0、最大値に別のシートにあるセルの値を参照するにはどうすればいいのでしょうか?
>>649
一応作ってみたよ。エラーチェックは省いてあるから細かい所は手直ししてね。

Dim count As Integer

Private Sub Perm(i As Integer, n As Integer, p() As Integer)
Dim j As Integer, t As Integer
Dim str As String

If i < n Then
For j = i To n
t = p(i): p(i) = p(j): p(j) = t
Perm i + 1, n, p
t = p(i): p(i) = p(j): p(j) = t
Next
Else
str = ""
For j = 1 To n
str = str + Range("a" + Format(p(j)))
Next
Range("b" + Format(count)) = str
count = count + 1
End If

End Sub
続き

Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer, k As Integer

i = Application.CountA(Range("a1:a65535"))
j = Application.Fact(i)
ReDim p(j) As Integer

For k = 1 To i
p(k) = k
Next

count = 1
Perm 1, i, p

End Sub
スマソこちらに差し替えて下さい。

Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer

i = Application.CountA(Range("a1:a65535"))
ReDim p(i) As Integer

For j = 1 To i
p(j) = j
Next

count = 1
Perm 1, i, p

End Sub
657デフォルトの名無しさん:03/02/26 20:01
VBAでCSVファイルをExcel2002のシートに貼り付けようとして

(略)QueryTables.Add(Connection:="TEXT;c:\text.csv"(略)
上のような感じでやってみたのですが

文字化けしてしまって読むことが出来ません。
なにやらExcel2002ではテキストファイルを読ませると
デフォでWindowsANSIで読まれてしまうらしく、
文字コードの変換もわからず・・・

出来る方おりましたら教えてください
>657
sFilePath = "c:\text.csv"
sDir = Left(sFilePath, InStrRev(sFilePath, "\") - 1)
sFileName = Mid(sFilePath, InStrRev(sFilePath, "\") + 1)
sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & ";Extended Properties='text;HDR=NO;FMT=Delimited'"

ADO参照設定してこんな感じでやるんじゃないの?
SQLに使うテーブル名はsFileNameつかってよろしく。
素直にOpenしてからCopyしてPasteSpecialしたらどうだ?

Option Explicit

Sub CsvPaste(r As Range, FileName As String)
Workbooks.Open FileName:=FileName
Dim wb As Workbook
Set wb = ActiveWorkbook
wb.Worksheets(1).UsedRange.Copy
r.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
wb.Close
End Sub

Sub test()
Dim r As Range
Set r = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
CsvPaste r, "text.csv"
End Sub
660デフォルトの名無しさん:03/02/27 21:30
>659,658
返答ありがとうございます

ADOで行ってみているのですが、
CSVの中に1.12345678901234E-02というような指数が1としか表示されません・・・
ADOの文字列が悪いのでしょうか・・?

それ以前にVBAではなくVBでやりたいと思ってやってるのがいけないのかな・・
>それ以前にVBAではなくVBでやりたいと思ってやってるのがいけないのかな・・
それ以前にVBA,VB共に入門書すら読んでないのがいけない。

>CSVの中に1.12345678901234E-02というような指数が1としか表示されません・・・
これ......。中途半端な知識では何の言語を使っても同じ。
662デフォルトの名無しさん:03/02/28 10:51
プロジェクトのロック解除の仕方誰か教えて〜
>>662
そういうソフトがあるからググって探せ
664デフォルトの名無しさん:03/03/02 18:27
整数型の配列を全て-1で初期化したいのですが、ループを回すしかないのでしょうか?
C言語のmemset関数みたいなのないでしょうか?
>>664 無い
666664:03/03/02 18:38
>>665
マジですか?
667665:03/03/02 18:43
>>666 マジでつよ。
668664:03/03/02 18:56
>>667
そうですか。仕方ないのでループさせます。
御回答ありがとうございました。
>>668
しょっちゅうループ書くのが面倒で見苦しくなるのなら、関数にしちゃえよ。
memsetなんか簡単だろ。
670デフォルトの名無しさん:03/03/03 00:02
あるワークシートをdeleteメソッドで削除しようとすると、
いちいち削除の確認をしてくるのだけど、このダイアログボックスを
出さずにするにはどーしたら良いのでしょうか?
おしえてちょーだい!
671デフォルトの名無しさん:03/03/03 00:41
>>670
Application.DisplayAlerts = False
(処理)
Application.DisplayAlerts = True
672デフォルトの名無しさん:03/03/03 00:47
>>671
早速のレスありがとうございます。
うまくいきました。
2ちゃんで、親切受けるのはじめてです。うれじー!!!
673デフォルトの名無しさん:03/03/03 17:44
質問させてくだーさい。
AddLineやAddShapeにて描いたワークシート上の図形を
グループ化する良い方法は何でしょう?
SelectAllは関係ないほかの図形も選択してしまうので使いたくありません。
よろしくおねがいしまーす。
Dim shps As Shapes
Set shps = ThisWorkbook.Worksheets("TEST").Shapes
Dim shp1 As Shape
Set shp1 = shps.AddLine(10, 10, 110, 110)
Dim shp2 As Shape
Set shp2 = shps.AddLine(10, 110, 110, 10)
Dim sr As ShapeRange
Set sr = shps.Range(Array(shp1.Name, shp2.Name))
sr.Group

こんな感じでやれば良いはず。
グラフをメタファイル形式で保存するのは無理なんでしょうか?
exportではGIFとJPEGのみ?
676673:03/03/05 22:54
>>674
わかり易い例をありがとうございます。
なんとなく、わかりました。が、
いくつの図形が描かれるかは、前もってわかりません。
Arrayに動的に引数を与えることが出来るのでしょうか?
また、その方法は?
質問ばかりですいません。
>>676
ヘルプで ReDim ステートメントを引くべし。
678673:03/03/08 12:28
674の例を以下の様にredimt使ってやってみましたが、
「アプリケーション定義またはオブジェクト定義のエラー」
となってしまいます。何故なのでしょう。
Dim MyArray() As Variant
Dim shps As Shapes
Set shps = ThisWorkbook.Worksheets("TEST").Shapes
Dim shp1 As Shape
Set shp1 = shps.AddLine(10, 10, 110, 110)
Dim shp2 As Shape
Set shp2 = shps.AddLine(10, 110, 110, 10)
ReDim MyArray(2)
MyArray(0) = shp1.Name
MyArray(1) = shp2.Name
Dim sr As ShapeRange
Set sr = shps.Range(MyArray)
sr.Group

なにとぞお助け下さい。
679デフォルトの名無しさん:03/03/08 13:08
× ReDim MyArray(2)
○ ReDim MyArray(1)

または
> ReDim MyArray(2)
> MyArray(0) = shp1.Name
> MyArray(1) = shp2.Name
この3行を次の1行で
MyArray = Array(shp1.Name, shp2.Name)
681デフォルトの名無しさん:03/03/08 15:25
VBAのヘルプの例のコードを実行したら一回目はうまく動くのですが、
2回目に実行するとエラーになります。教えてください。
Set myBar = CommandBars _
.Add(Name:="ユーザー定", Position:=msoBarPopup, Temporary:=False)
With myBar
.Controls.Add Type:=msoControlButton, ID:=3
.Controls.Add Type:=msoControlComboBox
End With
myBar.ShowPopup
>681
そもそも同じ名前で追加するのはOKなのか?
Excel97のユーザーフォームでリストボックスやコンボボックスを
使うときにタイトル行を付ける事ができます(ColumnHeads=True)
が、シートがソースの時しか機能しません。
値をaddItemやListやColumnで設定したときにタイトル行を表示
するにはどうすればいいか教えてください。
>>682
というより、2回やる必要があるのか!
エクセルのVBAで、他の.exeファイルを呼び出すことは出来ますか?
マクロを走らせた時にWACOMのPenPlusパーソナルを呼び出したいのですが。
>>685
>>37-40 あたり
687デフォルトの名無しさん:03/03/12 20:38
教えてください。
フォームウィンドウを移動した時に、残存画面が
残ってしまうんですが、残らないようにする事は出きるのでしょうか?
残らないぞ。OSは何だ?
ディスプレイドライバがバグっているのではないか?
いっぺん再起動してみてくれ。
それでダメなら、次はディスプレイドライバのバージョンアップだな。
>>688
レスどうもです。
OSはWindows2000です。
もう一つ別のフォームは残らないのですが、
今のところそのフォームだけが、残ってしまいます。
再起動しても駄目でした。
ちなみにWin98の他のPCでも試しましたが同現象です。
ドライバの更新試して見ます。
690デフォルトの名無しさん:03/03/13 10:26
フォームにTextBoxとCommandButtonを張り付けて、
TextBoxに整数を入力した後、Buttonを押して、イベント発生みたいなことをやってます。
んで、イベント部分で、
Dim s As String
Dim i As Integer

s = TextBox1.Text
i = ?
とか書いてsを変換してiにIntegerの値を入れたいのですが、
StringをIntegerに変換するにはどうやるのでしょうか?

i = CInt(s)では、データ型変換エラーみたいなのが出ました。
691デフォルトの名無しさん:03/03/13 13:51
>>690
なぜ最初にStringに・・・
692デフォルトの名無しさん:03/03/13 13:53
>681
実行前に同じ名前のCommandBarをCommandBarsから削除する必要があります。
For Eachとか使って。
693デフォルトの名無しさん:03/03/13 13:58
>689
688のおっしゃるとおりドライバが怪しい。
ハードウエアアクセラレータを「なし」にしてみるもの手。
694デフォルトの名無しさん:03/03/13 14:02
>690
IsNumeric(s)で数値となりえるか確認して味噌。
>>694
100000もTrueだが?
696VBA初心者。:03/03/17 02:22
ヒントを頂きたいのですが、
フォームからファイルを開く操作をしたいのですが、
BVにあるファイルリストボックスみたいな動きをさせる方法はありますか?
うまくいきません。
良い方法があればお願いいたします。
FileSystemObject
698VBA初心者。:03/03/17 23:22
>>697
FileSystemObjectで検索して見ましたが
今のところ良いヒントが見つかりません。
どなたかもう少し詳しくヒントをいただけませんか。
手持ちの書籍では載っていませんし、
ネットで検索しても自分がやりたいことの項目がありませんでした。
エクセルVBAのフォームからwinでのファイルを開くや
保存する時に出てくるドライブ選択窓やファイル選択窓を出したいのです。
よろしくお願いします。
699デフォルトの名無しさん:03/03/18 00:12
>>698
なんかこれが一番答えに近そう。
http://www.mougb.net/cgi-bin/mdboard.cgi?acopr+ML2002100047
700まんこ
>>698
GetOpenFilename では何か都合が悪いのか?
702VBA初心者。:03/03/18 23:34
>>699
ありがとうございます。探してみます。

>>701
都合が悪いわけではないのですが、フォームから項目を入力して
セルにデーターを落としてシートのみを別名で保存するって言う方法で
見積書を作っているのですが、保存しているシートをフォームから
呼び出すのにファイルリストを出したいのです。
知識が乏しく思うような動きが出来ません。
GetOpenFilenameは何かアクション(ボタンを押すなど)で指定のファイルが
開くってことですよね?
どのファイルを開くかは特に決まっていません。
703VBA初心者。:03/03/19 00:00
>>701
すみませんでした、GetOpenFilenameって知らなかったのですが
ファイルを開くダイアログボックスが出るのですね。
ありがとうございました。解決しそうです。
がんばります。
704683:03/03/20 15:52
>683
分からんので外側にラベルを貼り付けることにした。
あるブックがOPENされているかどうか調べて,
開かれてなかったら開くという処理をしたいのですが,
はじめの調べるところのやりかたがわかりません。
どなたか教えてください。
>705
WorkbooksコレクションをNameで比較すればいいんちゃう?
>706
なるほどやってみます。
ありがとうございます。
708デフォルトの名無しさん:03/04/04 00:39
すいません、教えて下さい
エクセルでチェックボックスをクッリクすると文字が印字されて、
チェックを消すと文字が消えるマクロの組み方しりませんか?
>708
式で作れ。
=IF(checkboxdata,"文字","")
710デフォルトの名無しさん:03/04/08 13:20
教えてください。
シート上でshiftを押しながら右クリックしたときだけ、ある右クリックメニューを
だしたいのですが、shiftを押しているかどうかの判定はどのようにすればできるのでしょう?
よろしくお願いします。
711デフォルトの名無しさん:03/04/08 20:07
・・・
案だけ

KeyDownイベントにシフトキーを判定して押されてたら
シフト=ON


KeyUpイベントにシフトキー判定して 離されてたら
シフト=OFF

BeforeRightClickのなかで

if シフト=ON then
  ・・・・
endif


変数シフトの定義に注意すれば いけそうだが。


>>710
はよ退職せーや。働かれると迷惑だ。
>>712
おまえが社長だったら、おまえの下で働かされている社員が不憫だ(w
盛り上がってまいりました!!
715デフォルトの名無しさん:03/04/09 19:32
710です。
>>711
シートには、KeyDown、KeyUpイベントがないようなのです。
それで、困っています。それとも、あるの?
>>712
答えられない無職ヤローはひきこもってろ。もとい、ひっこんでろ。
>>715
C++ でフック DLL を作れ。
>>715
というか、自分もわからないクセに偉そうだな。
718デフォルトの名無しさん:03/04/10 00:45
>>717
ネタにマジレスかっこ悪い。
719デフォルトの名無しさん:03/04/10 07:05
>>715
あ・・・
シートには、keyup とか 無かったみたい・・ スマン

初めから、右クリックのメニューに、
 SIFTキーを押したとき用のも表示されるようにしておく・・・
じゃ だめですよね

いい案 浮かばん・・・・
720VBAでメールを送りたい:03/04/10 11:01
特定のセルが特定の条件に達した段階で、メールを送るようなマクロ
を書きたいのです。MAPIを使わずにできるでしょうか?いろいろ調
べたんですけど、さっぱりです。本も5冊持ってるんですけど、手が
かりをつかめません。ある程度の方向がわかれば自分で調べますので、
教えてくださいませんか?
>>720
はよ退職せーや。働かれると迷惑だ。
>>720
cmailっつーメールm送信専用のフリーソフトがあるから、
それ呼び出せばいい
>>720
sendkeyで手動手順を再現させれば出きるかも・・
ただ、メールソフトの起動のタイミングとか かなりむずいです
(フォーカスの移動が・・・)

>>722さんのフリーソフトは知りませんが、そういうのを起動させるだけ!の方が
現実的かと。
>>710
GetKeyState(nVirtKey)
GetAsyncKeyState(nVirtKey)
あたりのAPIあたりでうまくいくかも。

>>720
"mailto:(メールアドレス)"というアドレスをブラウザで開こうとすると、自動でメーラーが立ち上がる。
これを利用するとか。
725デフォルト名無しさん:03/04/12 15:59
列に空白が存在する場合上の値と同じデータを入れる処理を行いたいと
思って下記のように書いたのですが。
For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
' セルが空白だった場合上のセルを今のセルへコピー
If Cells(i, 1).Value = "" Then
Cells(i - 1, 1).Copy Cells(i, 1)
End If
Next
空白が1行の場合だと埋めてくれるのですが、2行以上空白が続くと
うまくいきません、どうすればうまくいくでしょうか?おながいします
>>725
下から走査すりゃそうなるのが当たり前だろう。
727デフォルト名無しさん:03/04/12 17:14
>>726
なるほど、こりゃ下からって意味だったのか。for文の仕組みも
よくわからずに打ってたよ。サンクス
728tantei:03/04/12 17:17
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   ■グローバル探偵事務所 

>720
BASP21.DLLとかを使う手もあるでよ。
「VBAで」と言えるかどうか疑問だけど。
730excel 290:03/04/15 18:47
同じ名前のオートシェープがあると、
x = 0
For Each obj In ActiveSheet.DrawingObjects
obj.text = cstr(x)
x = x + 1
Next
同じ名前の一つ目の図形しか、テキストが変わりません。
なぜでしょうか?
>>730
よくわからんが
こうやって、何回ループしてるか 試して

x = 0
For Each obj In ActiveSheet.DrawingObjects
obj.Text = CStr(x)
x = x + 1
Debug.Print x, CStr(x) 'ここに こうやって
Next
732デフォルトの名無しさん:03/04/15 19:37
>>730
できたら 前後のコードも 見たい
733デフォルトの名無しさん:03/04/15 22:20
>>731
ループの回数はOK。なんかねー。VBでいう、同じ名前のボタンが配列みたいな状況なのよ。
ループ中は、
[T1] [T2] [T1] [T2] [T3] なんだけど。
      ==== この二つのテキストを書き換える方法が知りたい。
734デフォルトの名無しさん:03/04/15 22:37
>>733
DrawingObjects
にカーソルおいてPF1のヘルプは?

コード全部晒してくれないと 試す気にjならんので ゴメソ
735デフォルトの名無しさん:03/04/15 23:02
VBA入ってるけど、VB入れてないのでヘルプファイルは無い。(藁

逆にほかの方法で、オートシェープのTextBoxにアクセスできればそれでも良いのですが…

コードはこれ以上晒す必要は無いはず。
ActiveSheets.DrawingObjets("T1").Text = "123456"
これで、T1という名前のTextBoxが複数あった場合、
すべてにアクセスする方法が知りたいのですが…
> VBA入ってるけど、VB入れてないのでヘルプファイルは無い。(藁
あんたのセリフ素人臭すぎ怪しすぎ。
VBAのヘルプにのってるでしょ?
それにVBのヘルプっていうのはMSDN。VCとかと共通。
>>733
アクセスさえ出来ればいいというならとりあえずこんな感じか。

Set obj = ActiveSheet.DrawingObjects
x = 0
For x = 1 To ActiveSheet.DrawingObjects.Count
obj(x).Text = CStr(x - 1)
Next
obj = ""
>>735
なんとなく
無理っぽい・・ けど わからん
メルくれたら 該当ありそうなとこの HELP抜粋送るが・・

同じ名前がつくの?
そのループ内で .NAMEプロパティを・・・ いや やっぱ わからん



739734:03/04/15 23:48
>>737
あー 動きますね(最後の一行はErrだったけど)
0〜数分の textが連番で 入りますね
740tantei:03/04/15 23:49
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   ■グローバル探偵事務所 

741金正日:03/04/15 23:51
   ,rn                 
  r「l l h.                / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | 、. !j                | 
  ゝ .f         _      |  
  |  |       ,r'⌒  ⌒ヽ、.  │  http://freehost.kakiko.com/hiroyuki/
  ,」  L_     f ,,r' ̄ ̄ヾ. ヽ. │   こんなのあったニダ
 ヾー‐' |     ゞ‐=H:=‐fー)r、)  | 
  |   じ、     ゙iー'・・ー' i.トソ   | 
  \    \.     l ; r==i; ,; |'  .人_ 
   \   ノリ^ー->==__,..-‐ヘ___
     \  ノ ハヽ  |_/oヽ__/     /\
      \  /    /        /  |.  
        y'    /o     O  ,l    |
名前って具体的に何を指してるのだ?
なんか取り違えているいる気がする。

ループ回数が合っているなら、
どのように(どのプロパティを)T1
と名付けているのか分からんが、
1回目のループのT1と次のループのT1は同じ
コントロール(オートシェイプ)を
参照しているから、1つしか変わらない
様に見えるのでは?
>ActiveSheets.DrawingObjets("T1").Text = "123456"
これで、アクセスできるのなら、

>これで、T1という名前のTextBoxが複数あった場合
"T1"というインデックスのオブジェクト(DrawingObjet)
は複数作成することはできない。
>>743
論点が違うと思うのだが。作成出来てるから質問してきてるわけだし。

実際試してみたけど、DrawingObjetsコレクションのNameプロパティに
設定する値はユニークでなくても構わないみたいだよ。

つか手動で名前を付けた描画オブジェクトをコピペで複製すると、
みんな同じ名前になるから試してみなよ。
>>743はうそ言ってた。ゴメソ。
コピペで複製しても同じ名前にならなかった。
コード内で名前を同じにするとできるね。

でも、これは無理だろな。VBAはコントロール配列
はできない。インデックス名じゃなく、
上にもあるように、インデックス番号で逐一変えていく
しかないね。
746デフォルトの名無しさん:03/04/16 07:46
>>745
T1, T2 を作成。
T1, T2 をShift+Ctrlで同時選択。
コピペ。
で作れます。

コントロール配列の場合、Objectが配列かどうかはどう調べますか?
747excel 290:03/04/16 10:25
>>745
ですから、インデックス番号で、3番目にアクセスしているのに、1番目が書き換わってしまうんです。
バグですかね?
748excel 290:03/04/16 11:01
以下のPGの上半分では、Group化したオブジェクトの中身を取得しようとしていますが、
うまく動きません。TextBoxesが無いというメッセージが出ます。
どうすればうまく動きますか?
For y = 1 To st.GroupObjects.Count
For x = 1 To st.GroupObjects(y).TextBoxes.Count
Set shape = st.groupsobjects(y).TextBoxes(x)
Debug.Print "Shape " + TypeName(shape) + "/" + shape.Name + "/" + shape.Text
For i = 1 To UBound(DICTKEYS)
shape.Characters.Text = Replace(shape.Characters.Text, DICTKEYS(i), DICTVALS(i))
Next
Next
Next
For x = 1 To st.TextBoxes.Count
Set shape = st.TextBoxes(x)
Debug.Print "Shape " + TypeName(shape) + "/" + shape.Name + "/" + shape.Text
For i = 1 To UBound(DICTKEYS)
shape.Characters.Text = Replace(shape.Characters.Text, DICTKEYS(i), DICTVALS(i))
Next
Next
グループ化はまとめて参照出来るところが利点なのだと思うが。

まともにやるならグループ化解除して、処理終了後に再度グループ化。
750excel 290:03/04/16 15:18
ありがとうございます。
グループ化を解除する方法を教えてください。
また再びグループ化する場合、
含まれていたオブジェクトがどれなのか調べる方法はありますか?
751デフォルトの名無しさん:03/04/16 15:51
> グループ化を解除する方法を教えてください。

Ungroup

> また再びグループ化する場合、
> 含まれていたオブジェクトがどれなのか調べる方法はありますか?

面倒なので、グループを別のシートにカット&ペーストしてから作業
すれば? 作業が終わったらまたカット&ペーストで、元のシートに
戻す。
.captionじゃねー?
753山崎渉:03/04/17 15:18
(^^)
754山崎渉:03/04/20 04:34
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
730じゃないけどグループ化したオートシェープについて質問。

class hoge にaddshape()でhoge1,hoge2,hoge3……と作った図形をメンバに持たせた上でgroup化しました。
(hoge3は四角形です)

debug.print hoge3.TextFrame.Characters.Text

で図形にカキコ済みのテキストを表示するのはできたんだけど、

hoge3.TextFrame.Characters.Text ="test"

とすると以下のエラーメッセージが出ます。


実行時エラー'1004'
Characters クラスの Text プロパティを設定できません。

textframeやcharactersをヘルプで見ると書き込みも出来るはずなのに……どうして?
んで、これを各モジュールに貼り付けると上のエラーが発生。
---------------------標準モジュール------------------
Sub add_hoge()
Dim x As New choge
x.create_hoge '図形のグループを生成
x.c_text 'テキスト書き換え(エラー)
End Sub

---------------------クラスモジュール-----------------

Dim hoge0 As Object
Dim hoge1 As Object
Dim hoge2 As Object

Public Function create_hoge() '二つの図形hoge1とhoge2をグループ化
Dim mys As Object
Set mys = ActiveSheet.Shapes
Set hoge1 = mys.AddShape(msoShapeIsoscelesTriangle, 0, 0, 45, 45)
Set hoge2 = mys.AddShape(msoShapeRectangle, 0, 0, 45, 45)
hoge2.Select
Selection.Text = "test0"
Set hoge0 = mys.Range(Array(hoge1.name, hoge2.name)).Group
End Function

Public Sub c_text() 'hoge2のテキストを書き換え
Debug.Print hoge2.TextFrame.Characters.Text
hoge2.TextFrame.Characters.Text = "test1" '←ここでエラー
Debug.Print hoge2.TextFrame.Characters.Text
End Sub
757デフォルトの名無しさん:03/04/22 22:03
>>755
ぶっちゃけ無理なんじゃないの? 画面上からは確かに出来るけど、
マクロ記録中だと出来なくなるし、上の方の回答にも、バラしてから
やれなんてのがあったし。

調べてみたところによると、VISIOには階層化したオブジェクトの子階層
にアクセス出来る定数があるみたいだ。具体的には
Shapes(1).Shapes(1), visSubSelect←これ
こんな感じで下の階層のシェイプをマウントすると、単独のシェイプと
同じようにアクセス出来るらしい(使った事無いから自信は無いが)。

ご存知の通り、エクセルにはこれに相当するメソッドは無い。
758デフォルトの名無しさん:03/04/23 20:29
シートになにかをコピペで貼り付けられると動き出すマクロってエクセルでできます?
手入力だと動き出さないけどコピペだと動き出すようなもの。
>>758
手動でも動き出す

動いたあとに、手動かコピーか判別できればいいが、
それも多分無理
760デフォルトの名無しさん:03/04/23 22:29
>>759
そうですか。残念。
最低限、シートが書き換えられたかどうかは
Worksheet_Change(...)でやればいいんですよね?
761755:03/04/23 22:30
>757
駄目かぁ……情報TNX
結局グループ解除→書き換え→再グループ化で実装してみますた。


Public Property Let hogename(str As String)
hoge0.Ungroup
hoge2.Select
Selection.Characters.Text = str
Set hoge0 = Selection.ShapeRange.Regroup
End Property


そもそもバラした状況でも、一旦hoge2をselectしてからでないとtextを書き換えできなかった罠。
なんか激しく勘違いとかしてないだろうか不安……
>>760
ですね
>>758
目的(やりたいこと)を書いてくれたら
もう少し、他の手段でも、誰か考えてくれるかも
764デフォルトの名無しさん:03/04/23 23:01
>>763
いや、会社の事務作業なんですけどアンケートみたいなのやってて
エクセルのシートで入力フォームつくって配布しているんです。
各シートに固有な情報を隠しセルに埋め込んで、回収後に
マクロで集計しているんですけど、
人によっては他人の入力したシートをそのまま全コピー&全ペーストしちゃって
隠しセルの情報を壊してしまうわけです。
セルの保護機能も考えたけど、動くマシンとそうじゃないマシンがあるって話も聞いたことあるし
イベントマクロで保護できないかなと考えたわけです。
全コピー&全ペーストをブロックできればな、って考えてます。
765デフォルトの名無しさん:03/04/23 23:07
>>764
情報を隠しセルに埋め込んだりせず、マクロ内に記述すればいいのでは?
シートの関数やデータなんてすぐに破壊されちまうからな。
766デフォルトの名無しさん:03/04/23 23:16
>>765 (レスありがとうございます)
ええ、ただ、配布する各個人毎に入力フォームの内容が少しづつ違うんですよ。
マクロでマクロを書き込めれば話は別なのですが、
VBAの場合できないですよね?
隠しシートも考えたのですが、その情報を参照しているセルがコピペで破壊されたらと考えると
やっぱり「コピペ」自体を防止する方法がないかなと考えております。
>>764
ファイルのプロパティとかは・・・

シート1がアンケートで、シート3が何気に隠し情報とか

768765:03/04/23 23:20
>>766
情報を参照しているセルを含むシートを非表示にすればいい。
769765:03/04/23 23:23
768は誤爆です。

>>766
エクセルファイル名の末尾にシートを識別するフラグをつける等して
select case で別々のfunctionを呼べばいい。
770765:03/04/23 23:26
>>766
そうだ、「貼り付け」をメニューから消せばいいじゃん。
マクロで。
771デフォルトの名無しさん:03/04/23 23:29
>>768
アンケートシート自体が隠し情報を参照していて、
このシートを非表示にしてしまうとまずいのです…
って、そうかぁ!シートの数式で参照させるのじゃなくて
なにか入力があったら Worksheet_Change で内容を非表示シートに
転送すればよいのか!?
う、上手くいきそうです。ありがとうございます!
772765:03/04/23 23:31
773766:03/04/23 23:34
>>770
え、標準メニューもマクロから消せるのですか!?
774765:03/04/23 23:47
「上書き保存」と「終了」以外、全部消せばいい
775766:03/04/23 23:53
>>774
まじですか!? カゲキ!!
うーん、ちょっと考えてみようかな…。
ただ、ユーザから「お前のファイル読み込んだら俺のエクセル壊れたんだけど
どうしてくれる!」ってクレーム殺到しそうで怖いなぁ。
>>774
メニューから消しても
右クリックでコピーとかされるんじゃないの?
777765:03/04/24 00:23
>>776
右クリックメニューも消せばいい
778776:03/04/24 00:34
>>777


了解

777おめ
コメントに設定情報もたせるのはだめ?

Excelでしか使えなくなるけど。
780アクセス素人:03/04/24 13:58
accessで モジュールをつかって
コマンドボタンとコマンドボタンを線でつなげたいのですが
そのやり方キボンヌ

というか教えてください おながいします
直線コントロールのプロパティでもいじれば?


あまり興味がない題材なので具体例は省くが
あと、ここはExcel(重要) VBAについてというスレなんで念の為
783アクセス素人:03/04/24 15:12
すれ違い すみません
784デフォルトの名無しさん:03/04/24 17:38
ActiveCellの列名を取るにはどうすればよいの?
行はOffsetで取ってこれたんだけど。
>>784
なんのこっちゃ?>行はOffsetで

With ActiveCell
    Debug.Print .Row
    Debug.Print Left$(.Address(, False), IIf(.Column > 26, 2, 1))
End With
786デフォルトの名無しさん:03/04/24 20:06
>>777
ショットカットキー(Ctrl+C,Ctrl+V)は?
787デフォルトの名無しさん:03/04/25 00:30
ワードアートとかオートシェィプを回転させたいので
ThisWorkbookに↓をきったんだけど
図形を変えたら動かなくなってしまった!

Shapesの()内の指定ってどうだっけ?


Option Explicit

Private Sub WorkBook_Open()

Dim PauseTime As Date, Start As Date
Dim i As Double

PauseTime = 0.01

For i = -90 To 0 Step 3

Start = Timer

Do While Timer < Start + PauseTime
DoEvents
Loop

ActiveSheet.Shapes(1).ThreeD.RotationX = i

Next i

End Sub

788784:03/04/25 01:10
>>785
まちがった。たまたまActiveCellに行番号が入力されてたので
その値を取ってきてただけだった。
789787:03/04/25 01:54
解決しました。スマソ。
790デフォルトの名無しさん:03/04/25 02:38
>>766
シート上にフォームを作るんじゃなくて、シート上にボタンを配置して、
ボタンを押すとアンケートのダイアログを表示するような形にすれば?
ダイアログなら、想定外の操作をされる可能性はかなり減る。
アンケートを集計って、、、
ACCESSでやれよ。
なんでやねん
EXCELでやるって言う発想が出てくること自体がおかしいんだ
から言ったって無駄無駄
集計をエクセルでやるという発想自体は普通だろ
久々にVBA使ったんだ。
構造体返す関数を作ったら
「ユーザ定義型はパブリックオブジェクトモジュールで宣言しないとだめぴょん!」
とエクセルに怒られたんだけど、これってクラス使ってオブジェクトで返せってこと?
確かエクセル95の時はOKだったような気がするんだけれどなあ。
いつ頃からこんなんなっちゃったの?
>795
標準モジュールにpublicでユーザ定義書けばいいんでないかい?
また質問させて頂きます。
環境:excel2000

あるクラスにオートシェープへの参照をメンバ(hoge as object)としてもたせています。
hogeが指す図をクリックしたらマクロを実行する、というのをやっててつまづいてしまいました。

下のようにonactionを使用すると、標準モジュールにあるマクロsub1は呼び出せたのですが、
そのクラス自身のメンバメソッドを呼び出す方法が不明です。これって呼び出せるものでしょうか?
駄目な場合、代替手段として標準モジュールのマクロに自分自身
(hogeを持っているクラスのインスタンス、thisポインタ)を渡す事は出来ますか?


class_initialize()
set hoge = addshape(適当な図形) '図の追加
hoge.onaction = "sub1" 'hogeをクリックするとサブルーチンsub1を呼び出す
'sub1をクラスのメンバにしたい
'又はsub1にthisを渡したい
798Beginner's Lack:03/04/27 04:55
コンポボックスを、出力先セルを1行ずつずらしながら貼り付けていくこと、って
出来ますか?

貼り付け先のセルの指定を変数にしたいのですが・・・
799766:03/04/27 05:05
>>790
レスサンクスです。
入力項目が300行x36列ありまして
フォームだとグリッドのocxかなにか使うことになってしまいます。
できればシートでいきたいです。
すんません。実はアンケートというよりも数値入力といったほうが
適当だったかもしれません。
>入力項目が300行x36列ありまして
これでコピペ不可かよ。殴っていいか?
>798
マクロ記録機能を使えば簡単にわかるけど、コンボボックスを追加するには、
「フォーム」なら
Sheet1.DropDowns.Add()
「コントロールツールボックス」なら
Sheet1.OLEObjects.Add();
位置は、セルに対してLeftとかTopプロパティを調べる。

でも、追加したいコンボボックスの数の上限がわかっているなら、
あらかじめ全部をシートに配置して、それの表示・非表示切り
替えたほうが簡単かな。
802766:03/04/28 04:04
>800
え?
シートの全セルコピー&全ペーストされちゃってるんですが…
それで隠しセルの内容が破壊されちゃってるわけです。
803766:03/04/28 04:12
>>800
失礼。入力者の労力を考えれば…、ということですね。
それはその通りなんです。殴られちゃってもしかたないです。
だから欲をいえば「シートの全セルコピー&ペースト」だけ防止したいんです。
マクロ的に書けば Worksheet.Cells.PasteSpecial のみ防止というか…
(余計殴られちゃうかな…、あうー)
804質問させてくださいまし:03/04/28 10:49
いくつかのシートを持つブックを作りました
@シートごとにボタンと、それにリンクされたマクロがいくつかあります。
Aシートごとにシート保護が設定されているものといないものがあります。
Bメールの送受信を取り扱うため、タイマを使って自動運転をしています。

あるシートをコピペして、新しいシートを作り保護したところ、
シート全体が特定ボタンにリンクされてしまったようで、本来ならボタン上でのみ
指先に変わるはずのマウスカーソルが、シートのどこにあっても指先になってしまいました。

同じ体験&解決した方はいらっしゃいますか?
コピペしたバチがあたったのでしょうか?w
最後の手段として、シートをイチから作り直すことは考えていますが、
できれば回避策がないものかご教授いただけるなら、と書き込んでみました。
805デフォルトの名無しさん:03/04/29 17:33
特定のセルに入力したときにイベントを発生させるには、どういうコードを記述すればよいのですか?
806デフォルトの名無しさん:03/04/29 17:57
>>805
ENTER, RETURN をフック、アクティブセルで判断する
807デフォルトの名無しさん:03/04/29 18:33
>>805
普通にWorksheet_Changeに書けばいいじゃん
引数のTargetを見て特定セルかどうか見ればよろし
>806
VBAでプロシージャは使えないだろ。
809デフォルトの名無しさん:03/04/29 20:36
今さらだけど>>19って
http://bpstore.nikkeibp.co.jp/msp/book/03359/03359.html
これのこと?
810805:03/04/29 20:38
>>807
If文で、TargetとRangeの中身の値を比較する方法ですね。
ありがとうございます。

>>806
プププププ
>>808 かなり意味不明
813デフォルトの名無しさん:03/04/29 21:38
>>808
>>811
やったことないヤツはすっこんでろよ。
実際できてんだから、煽る前に調べろっつーの。カスどもが。
814デフォルトの名無しさん:03/04/29 22:18
webクエリを使って、データを取得するときに、アクセスが混雑してるせいか、
たまに「ページが開けません」みたいなメッセージボックスが出るんだけど、
これを無視する方法知りませんか?
DisplayAlerts使ってもやっぱり出てきます。
>806
馬鹿発見(wwwww
>806
簡単にできるのに、わざわざ複雑なことを教えるなよ。
817809:03/04/29 22:42
これ以外に「公式」と名のつく本があるの?
しまった、806祭りに乗り遅れた
>817
http://www.hitachi-ia.co.jp/teacdetail.asp?forankcd=ZSYO11&teac=book2
右上に小さく「公式解説書」とあるみたい。
820デフォルトの名無しさん:03/04/29 23:01
>>815-816
煽ることしかしらねーのか・・・もういいよ
821美人OL:03/04/29 23:03
あれっ!昨日頼んだのにもう来てる本当に安かったのでびっくりしました

http://www.net-de-dvd.com/
822809:03/04/29 23:10
>819
ありがとうございます。いずれにしても入門書ですね。
>>19が上級者向けと言ってるのが気になります。
>>814
webクエリは使ったこと無いんだけど Connection の QueryTimeout プロパティ
は使えないのか?DAO経由ではないのか?

ヘタすると永遠に返ってこないんだが。
具体的には、タイムアウトを無限にした非同期接続で StillExecuting を見て
自分でタイムアウト処理すれ。
実はやったことは無いが、そういう機能はとりあえず実装されてる。
825デフォルトの名無しさん:03/04/30 10:26
エクセルでshell関数を使ってブラウザのSleipnirを起動させてリンクに飛ばしたいのですが、
方法がいまいちわかりません。

Dim ProcID As Integer
' Run Calculator.
ProcID = Shell("C:\Documents and Settings\AAA\My Documents\sleipnir140fb\Sleipnir.exe", AppWinStyle.NormalFocus)

ここまでは分かるのですが、その先が全然わかりません。
たとえば、yahooにリンク飛ばすとしたら、どうしたらいいでしょうか?

>>825
Sleipnir って知らんが
とりあえずコマンドライン引数としてぶち込んどけ

Shell """C:\...\Sleipnir.exe"" ""http://www.yahoo.co.jp/""", vbNormalFocus
827デフォルトの名無しさん:03/04/30 14:13
>>826
うむ、やってみる。
ありがd!
828814:03/04/30 20:43
>>823
>>824
ありがとうございます!試してみます。
829初心者です。:03/04/30 22:29
シートにある、楕円の図形位置(縦・横ともに)をVBA上の変数に移送したいのですが、どのようにコーディングすればよいでしょうか、すみませんが誰か教えてください。
830デフォルトの名無しさん:03/04/30 23:30
>>829

Sheet1.Shapes(0).Left
Sheet1.Shapes(0).Top
Sheet1.Shapes(0).Height
Sheet1.Shapes(0).Width
831826:03/05/01 07:47
>>825
お前マルチだったか
今頃気付いたよ
損した気分。。。
>>804
にて質問したものです・・・わたしの疑問にどなたか答えてくださいまし・・・(;_;)
833初心者です。:03/05/01 21:28
>>830
どうもありがとうございました。
早速試してみますね。
>>832
スマン 俺はそんな経験無いので・・・

とりあえずシート保護解除して
指先カーソルのまま右クリック→コントロールのプロパティ→サイズ
残念でし・・・

シートの保護を解除したら、指先は十字に戻ってしまうんですよねぇ。
で、保護中に画面全体がボタン化(どこにマウスカーソルをもっていっても指先のまま)
してるので、何のボタンにリンクされてるのかと思ったら、
コピペ元のシート(今は別ファイルになってる)のボタンになってました。
結局新規にシートを追加して、そちらにチマチマとオブジェクトをコピーしたら
>>804 の問題はでなくなりました。
ユーザーさんの誤操作をさけるためにもシート保護を使いたかったもので。

というわけで、自己解決のご報告。
837PPR:03/05/08 23:20
エクセルとは関係ないですが、

word本文の後ろに、マクロで指定したファイルの文書を追加する方法を教えてください。

よろしくお願いします。
838デフォルトの名無しさん:03/05/09 10:09
VBからVBAのThisWorkbookに書かれた関数を呼び出せますか?
VBA同士なら大丈夫なのですが…
誰かご存知の方教えてください。
839デフォルトの名無しさん:03/05/09 13:28
真性の馬鹿です。
http://pc2.2ch.net/test/read.cgi/tech/1023755967/806
帰ってきてください、寂しいです。
840806:03/05/09 14:59
(・∀・)呼んだー?
>>806
あんたのレスがネタ(にしてもくだらんが)と判断できない低脳ばかりでしたね。
842806:03/05/09 15:11
うぅぅん、ぼくのレスはねー、真性だよ(・∀・)
Worksheet_Changeを挙げなかったのはシマタ(・A・)と思ったけどねー。

やったことない人と叩きに走りたい人が盛り上がっちゃったんだねー。
>>838
関数なんぞ自作しろ

一応やり方は教えてやる
下はアークコサインのサンプルだ
参照設定で Microsoft Excel *.0 Object Library のチェックを忘れんな

Sub test()

    Const x As Double = 0.5

    Dim objApp As Excel.Application

    Set objApp = CreateObject("Excel.Application")
    With objApp.WorksheetFunction
        Debug.Print "XL : " & .Acos(x) * 180 / .Pi
    End With
    Set objApp = Nothing

    Debug.Print "VB : " & (Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)) * 180 / 3.14159265358979

End Sub
844デフォルトの名無しさん:03/05/09 18:00
>>841
やったことないヤツはすっこんでろよ。
実際できてんだから、煽る前に調べろっつーの。カスどもが。
845838:03/05/09 23:27
>>843
回答はありがとうございます。
ですが、ちょっと意味が違うんです。

エクセルが数個立ち上がっている状態で、
VBから特定のエクセルだけを落とすといった事をしたかったんです。

それでその特定のエクセルは名前が統一されていないので、
ブックに書き込まれている関数を呼び出して落とせたらなと言う考えなんです。

CallByNameなど試したんですが無理でした。
846名無しさん@そうだ選挙にいこう:03/05/09 23:29
>>845
常駐させて、起動したEXCEL.exeのプロセスIDを取得しておけばいい
847デフォルトの名無しさん:03/05/09 23:34
VBAを上達したいなら、まずはExcelの専門家にならなければ無理だ。
847がいいことを言った。
>>838
Const conFunc = "Test" '呼び出したい関数名
Dim xl As Excel.Workbook

Set xl = GetObject("C:TEMP\TEST.XLS")
MsgBox xl.Application.Run("ThisWorkbook." & conFunc & ")

VBA同士なら大丈夫って意味が判らないのだが、 一応これで呼び出せる。
>>849
レスサンクス
VBA同士ならってのはCallByNameでは呼び出せたということです。
今日はもう寝るので明日試して見ます。
ありがとうございました。
851デフォルトの名無しさん:03/05/10 22:22
ExcelがDDEで用意しているコマンド一覧が知りたいのですがどうすればいいのでしょうか?
今更DDEといった感じなのですが・・・・
852VBA勉強中:03/05/10 23:31
プログラムが一定時間経過してから動作するようにするにはどうしたらよいでしょう?
例えば、ウイルスの潜伏期間とか。
853デフォルトの名無しさん:03/05/10 23:38
>>852
Timer
854VBA勉強中:03/05/10 23:40
プログラムが終了していても、通用しますか?
VBAってタイマー使えたっけ?
856VBA勉強中:03/05/10 23:44
そういえば、見たことないような。
VBにはあったのに・・・
857デフォルトの名無しさん:03/05/11 00:40
>>855
あるけど、別のアプリにフォーカスが移動したら無効になったと思う。
最近のバージョンのOfficeなら、APIのタイマーが使えるかな。
858VBA勉強中:03/05/11 00:48
実はですね、俺、潜伏期間のコード手に入れるためにメリッサのソースを手に入れたんですよ。
けど、よく考えたらメリッサって即発病するから犯人がさっさと見つかったんだって事に気づいたんです。
俺は一体どうすれば?
お袋の誕生日に自動的にグリーティング・カードが出るようにしたいのに・・・
859デフォルトの名無しさん:03/05/11 00:51
>>858
自宅のパソコン?
ならWindowsの「タスク」使えば。
860VBA勉強中:03/05/11 00:54
ああ、そうでした!その手があった!
けど、わがままだけど、俺はプログラムでやりたい・・・
家族共有だから、あんま設定変えたくない・・・
>>860
↓こういう手法が参考になると思われ。
http://wibo.m78.com/clip/img/4942.gif
862VBA勉強中:03/05/11 01:15
・・・無理っぽい・・・俺には・・・できない・・・
俺は負け犬だあああああぁああああぁぁぁぁぁぁぁ!!!(ソリッド・スネーク風に)
863デフォルトの名無しさん:03/05/11 01:17
>>862
なんかウザくなってきたぞ。
864VBA勉強中:03/05/11 01:22
すいません。しかし・・・なかで応対・・・ウーーーン
>>858
その日の起動時に表示させるなら、
プログラム冒頭で年月日を調べて、
現在年月日=指定年月日 なら表示。
それ以外なら何もせずに終了。
で、そのプログラムをスタートアップに
登録しておく。
>>864
>>861 のどこが不満なんだ?ちゃんとグリーティングカード出せるじゃん。
867VBA勉強中:03/05/11 01:36
>>865
それしかなさそうですね。どうも、お世話になりました。有難うございます。
>>861
確かに・・・出せるけど・・・ところで、こういうのって「自動」なのかな?
タイマー、VBAで使えるよ。
別アプリにフォーカスが移っても大丈夫。
ただし、Excelが終了したら当然ダメ。
869デフォルトの名無しさん:03/05/11 22:43
初めてエクセルVBA書いて動いたのは良いが、
シート1では動くのだが、シート2ではエラーが出る。

シート1用のマクロを作ってしまったみたいだが、
汎用化するにはどうすればいいのでつか?
>初めてエクセルVBA書いて動いたのは良い
動いてねーじゃねーか。悪りーyo!

871デフォルトの名無しさん:03/05/11 22:49
>>870
シート1では動くんだYO。

入力として、シート1とシート2に同じデータを置いても、
シート2はエラー出ちゃうんだよぅ。

飽くまでシート1のマクロになってしまったようで。厨でスマソ
>>871
コード晒せ
873デフォルトの名無しさん:03/05/11 23:04
>>872
Sub OrgSort()
Dim hidari As Integer
Dim migi As Integer
Dim haba As Integer
Dim mokuteki As Integer
Dim mokutekiMei As String
Dim situmon As String
Dim taitoru As String

hidari = 1
migi = 1
situmon = "ソートしたい項目を正確に入力してください"
taitoru = "文字列入力"

mokutekiMei = Application.InputBox(Prompt:=situmon, title:=taitoru, Default:="新入会", Type:=2)

Do While Cells(1, hidari) <> ""
haba = 0
Cells(1, hidari).Select

・・・

このCellsで、シート2の場合、エラーが出ます。
Do While Cells(1, hidari) <> ""
haba = 0

Debug.Print "現在のhidari=",hidari  ’ここ追加
Cells(1, hidari).Select


この一行追加して結果教えれ
それと、コードはどこに書いているの?
>>873
漏れは、シート1でも、2でも動く・・・・
セルA1が空白でない場合

A1がセレクトされる
sheet1にコード書いてるアフォ
877デフォルトの名無しさん:03/05/12 00:46
>>867
間に合ったか?
>>876
アフォなんて書いてねーで、ちゃんとレスつけてやれよ
879デフォルトの名無しさん:03/05/12 21:27
>>874
すげー亀レスすまそ。別の外回り仕事行ってた。

追加して試したけど、何も変化無かったよ。
そうそう、コードはシート1に書いてる。

これが>>876の言うアフォなのかもしれないが
まあ、その通りなんだろうな・・・どうしたら汎用化できるんだYO!?
880873:03/05/12 21:29
そうそう、書き漏れたが879=873。

そういや何気なく使ってたDim。もしかして、
javaで言うprivate宣言みたいなもんなのか?
>>880
挿入
標準モジュール

で、そこに書く。
多分、全体をコピーすればいい。
そんで、シート1のは削除
882873:03/05/12 23:18
>>881
ありがd
883デフォルトの名無しさん:03/05/15 15:07
age
884Seiroggn:03/05/20 18:19
配列を利用してUserFormにある沢山のTextBoxを配列を使って操作したいのですが
途中で 『オブジェクト変数または With ブロック変数が設定されていません』 と表示されて
止まってしまいます。
何か根本的に間違っていると思うのですが正しい方法を教えてもらえないでしょうか?
宜しくお願いします。

UserForm1のコードに入力↓
-----------------------------------------------------
Sub clear2()

Dim TextBox(1 To 16) As Object
Dim i As Integer

TextBox(1) = TextBox1 '★ここで止まってしまう。
TextBox(2) = TextBox2
TextBox(3) = TextBox3
TextBox(4) = TextBox4
    ・
    ・
    ・
TextBox(16) = TextBox16


For i = 1 To 16
TextBox(i).Value = ""
Next

End Sub
-----------------------------------------------------
>>884
オブジェクト変数が設定されていないなら答えは一つだな

つかそのエラー(Error 91)のヘルプに思いっきり書いてあるわけだが
Set
887Seiroggn:03/05/21 00:33
>>885 >>886

set TextBox(1) = TextBox1

で解決できました。
アドバイスありがとうございました!
しかし、なんでSet文は廃止しなかったのだろうか。
オブジェクトのコピー(ディープ/シャロー問わず)は出来ないよな。
だったら、Setで区別しても意味無いじゃないか。

それとも、俺が知らないだけで、コピーって可能なのか?
889デフォルトの名無しさん:03/05/24 23:38
超初心者(MOUS一般程度)にもかかわらず、それだけで
何でもやらせようとするおじさん達のおかげで、なぜかVBA組むことに…。

申し訳ないんですが、教えてください。

特定のセルなりなんなりにファイル名をいれて、ファイルサーバから
該当ファイルを呼び出してくるようなものって、どうすればいいんでしょう?
その後やりたいことはなんとなくできたんですが(でも汎用化しきれてない)
それがなんとなくできなくて…。

宜しくお願いします。
890デフォルトの名無しさん:03/05/25 01:40
シート200枚くらいを管理するやつ作ったけど重くて使い物になりまへん(泣)
891デフォルトの名無しさん:03/05/25 01:51
892デフォルトの名無しさん:03/05/25 02:00
>>889
>>特定のセルなりなんなりにファイル名をいれて、ファイルサーバから
>>該当ファイルを呼び出してくるようなものって、どうすればいいんでしょう?

セルからファイル名を読み取る方法がわからないのか、それともファイルの呼び出し方がわからないのか、どっち?
あと、「呼び出してくる」というのは、どういう操作を指してるの?
893デフォルトの名無しさん:03/05/25 02:18
>>892
>セルからファイル名を読み取る
セルの文字列を読み取る。の間違いだろ
894デフォルトの名無しさん:03/05/25 12:25
>>892、893

わからないのはファイルの呼び出し方です。
呼び出してくるというのは、保存してあるファイルを探してきて
開く、という操作です。
文字列の読み取りはわかりました。

わかりにくい書き方してごめんなさい。

1回の処理件数が多い(100枚前後)ので、ファイルを開くのも
自動化したいと思いました。

よろしくお願いします。
895デフォルトの名無しさん:03/05/25 12:37
日本語がわかりずらいYO!
896デフォルトの名無しさん:03/05/25 12:50
Worksheet.open()したいのか?
897デフォルトの名無しさん:03/05/25 13:03
ファイルを開く
1.目の前にウィンドウを開く
2.ファイルシステムオブジェクトでファイルストリームを開く
3.Worksheetオブジェクトに読み込む
普通は2か3だがあなたは1を指してないか?
898デフォルトの名無しさん:03/05/25 13:25
そもそもこのスレって素人向け?
899 :03/05/25 17:51
漏れも偉そうなことはあまり言えないが、少なくとも人に質問する際に、
自分が何をしたいのか、どこで行き詰っているのかぐらいは整理してか
ら相談するようにしているぞ。

自分で「わかりにくい書き方してぼめんなさい」と言う前に整理したらどうYO?
900デフォルトの名無しさん:03/05/25 19:12
>>899
それに、自分で調べてやってみて、どうしてもうまくいかずに引っかかる
ところがあって質問、じゃなくて仕事丸投げだもんなぁ…
901889:03/05/25 20:34
すみません。


逝ってきます…。
902デフォルトの名無しさん:03/05/26 09:47
98SE上のXL2002-SP2で、「グラハム」って入ったワード書類を
「c:\test.doc」としておいて、以下のコードで文字列置換をしようと
すると、おだぶつ、で止まるんですが、なんかヘマしてますかね。
詳しい方、おねがいします。

Delphi4で同じことさせると、うまくいくんですけど・・・

Sub test()
Dim oW As New Word.Application
Dim oWD As Word.Document
oW.Documents.Open FileName:="c:\test.doc"
Set oWD = oW.ActiveDocument
With oWD.Content.Find
.ClearFormatting '<-おだぶつ
.Execute findtext:="グラハム", replacewith:="おいスティーブ", Replace:=wdReplaceAll
End With
oWD.SaveAs FileName:="c:\test2.doc" '別名で保存
oWD.Close
oW.Quit
Set oWD = Nothing
Set oW = Nothing
End Sub
ちなみに2K上のXL97だと、動くんですよ。なんでかな。
904902:03/05/26 13:32
OfficeXP最初からインストールやり直したら
直ってしまった。スレ汚し、スマソ。
905デフォルトの名無しさん:03/05/26 14:51
質問です。
例としてですが、以下のようにVBAを書いてみました。
-------------------------------------------
i = 1
For x = 0.1 To 0.7 Step 0.1
Cells(i, 1) = x
i = i + 1
Next
end sub
-------------------------------------------
xが0.7になるまで、A列に書き出せ、というような意味だと思います。
ですが、実際に動かしてみると、0.6までしか書き出しません。
試しに、0.7の部分を変えていくつかまわしてみたのですが、結果は以下の通りになりました。
0.5 → 0.4 まで書き出し
0.6 → 0.5 まで書き出し
0.7 → 0.6 まで書き出し
0.8 → 0.8 まで書き出し  ←正常に終了?
0.9 → 0.9 まで書き出し

このようなことから、0.7以下の場合に何か起こってしまうのかと思ったのですが、
どこか間違い等があるのでしょうか。
よろしくお願い致します。
906デフォルトの名無しさん:03/05/26 15:32
>>905

それはDOSの大昔っから抱えてる、誤差のせいではなかろうか。
ていうか、x の型はなに?
907デフォルトの名無しさん:03/05/26 15:45
>>906
Dim x As Double
Dim i As Integer

としていました。
これは昔からある問題なんですか?
パソコンに疎いもので、ぜんぜん知らなかったです。
908デフォルトの名無しさん:03/05/26 16:16
>>907

Single,Doubleはデータを2進数で格納するので、小数点の扱いがニガテなの。
1は2の0乗、2は2の1乗、3は2は2の1乗+2の0乗、4は2の2乗・・・
でも0.1を正確にあらわせないので、近似値になってしまうの。
だから、0.1に0.1ずつ足せば0.1、0.2、0.3、0.4・・・
となりそうだけど、ちっちゃい誤差が溜まってなかしくなるです。

じゃあどうすればいいかっていうと、例で使われた程度の範囲なら、
Currencyは都合がいいです。小数点以下4桁までしか扱えませんが、
この桁の範囲で計算するぶんには誤差は生じません。

どうしてかっていうと、Currencyは実は見せ掛けの小数というか、
内部では10000倍して整数として扱っているの。
例えば0.0001は、パソコン内部では1として扱い、
小数点の位置だけをずらして最終的に小数にしてるから。
909デフォルトの名無しさん:03/05/26 16:19
×・・・溜まってなかしくなるです
○・・・溜まっておかしくなるです

いい気になって書いてるうちにミスりました。
練炭で逝ってきます・・・
910905,907:03/05/26 16:35
>>906,908
ありがとうございます!
この程度の計算では、single,doubleは向いていないみたいですね。
Currencyにしたら計算できました。
これからもよろしくお願い致します。
911デフォルトの名無しさん:03/05/26 16:47
・これからもよろしくお願い致します。

・これからも、わからないことは調べずに貴方たちに任せます。
912デフォルトの名無しさん:03/05/26 17:06
直接VBAには関係ないのですが、
エクセルファイルが開けなくなってしまいました。
何か対処方法はありませんか?
こういう事って良くあるんでしょうか?
(XPです)

・作業過程と症状
1.AというエクセルファイルでVBAプログラムしていた。
2.その状態でBというエクセルファイルを開いたらフリーズしてしまった
3.エクセルを強制終了
4.次にAのファイルを開くと、シートの表示はされるが、カーソルが砂時計表示のまま固まってしまう。
  (タスクマネージャでみると、エクセルがCPUの98%位を使用したまま)
ちなみに、AもBも20M位のファイルです
913デフォルトの名無しさん:03/05/26 17:28
>>910
この程度の計算に向いてないというよりは、昔っから体験してることの
延長線上みたいなもんだよ。
電卓で10÷3×3=とやっても10にならないのとほぼ同じ。
小数点以下に精度を要求する計算でも、下のほうの桁はアテにならないからね。

>>911
こーいうのは調べてもわかりにくいよ。
なんせ本人には理屈の見当がついてないわけだから。
914デフォルトの名無しさん:03/05/26 17:43
>>912

俺も以前似たような質問をしたが放置された。

まずエクセルのセキュリティ設定を中か高に変える。

マクロつきブックを開こうとすれば警告が出るのでマクロを無効にする。

開いたらVBエディタを開いてマクロがクサッてないか確認

別名で保存
915912:03/05/26 18:58
>>914
ありがとうございます。
参考にしてみます。

何か、前にも同じ様な現象が起きた気がします。
微妙に信用できないエクセル
916デフォルトの名無しさん:03/05/26 21:06
漏れ的にも今イチ信頼できないエクセル。

バックグラウンドコンパイルに問題があるのではないかと、
保存する前には自分でコンパイルするようにしてみた。

あと、編集を続けてるとMSIME2000が「変換できなくなった」と言ってくることがある。
編集を続けますか?と聞いてくるので当然のように「はい」を選ぶと落ちる。
落ちたら、>>912になる確率が高い。
だから、「いいえ」を選ぶようにしてる。

いったいなんなんだか・・・
そもそも『20M』位のブックって・・・そんな、事も無げに。
918デフォルトの名無しさん:03/05/26 22:40
65MBのブックてのもあるぞぃ
サッサとAccessに移行しろって感じ。

・・・そして、Accessでも謎の現象に見舞われる、と。
案外、ESCボタン押したら止まったりして。つまり単にマクロ実行中。
920デフォルトの名無しさん:03/05/27 11:14
>>919
そう思うんだけど、止まったタメシがないんだよなぁ。

あと、何十MBにもなると、再計算に30分(@Athlon1GHz)以上かかったりして鬱。

スクリーンセーバーや壁紙チェンジャーとかのせいで再計算が発生したら
止めようがない(まれに止まってくれるけど)。ただひたすら待つのみ。
数MBになると思われる時点で、Accessを使うよう方針変更すべきなんだな。
921山崎渉:03/05/28 12:40
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
保守
923_:03/05/28 20:03
924デフォルトの名無しさん:03/05/28 20:44
ExcelVBAでシートの各レコード毎にコマンドボタン付けて、それを押したら詳細シート表示。
って感じでシート管理するヴォケみたいな思い付きでを続けてたらあっという間にシート180枚超えました。
Accessと連携してなんとかならないものかと考えましたが、結局、レコードの詳細表示を
保持するのはExcelシートじゃないとダメなんです。詳細表示シートは図とか使ってますし。
何か良い方法ないでしょうか?このままでは来月中にシート開かなくなります。
表示する詳細シートを同じブックに作る必要は無いと思うんだが
>>924
詳細シートのそれぞれを別のブックにして、
コマンドボタンから該当のブックを呼び出せば?
ファイルの数が多くなるけど、
ばかでかいファイルを読み書きするより、
軽くなるのではないかと思います。
927924:03/05/28 23:37
10件1Bookくらいに分割する方法はやってみました。
結果、これってカッコ悪くないですか?
無駄に重いブックを作るよりはスマートだろう
929デフォルトの名無しさん:03/05/29 00:09
ここってにちゃんねると思えないほど熱いんだが
次ぎスレ用にVBAに関するQ&A集のテンプレだれか作ってくれ
おながい
>>929
・質問する人は可能な限り具体的に書いてね。
・コード(プログラム)を晒すと、なおヨシ。
・質問を小出しにすると、大抵遠回りになります。
・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。
・回答がなくてもキレないで。
・分かる人はできるだけ回答して下さいませ。

こんなんで、いいんじゃない?

Q&Aは、無理だろ・・・
931デフォルトの名無しさん:03/05/29 01:53
>>929
> 次ぎスレ用に
「俺様用に」と言いたいんだろ?白々しく「次スレ用」なんて言わないでおくれ。
932 :03/05/29 07:25
>>930
後、
・書き込む前に推敲してわかりやすい文章に汁。
も追加しておいた方が。

>>924
データをAccessに追い出して、毎回図を生成してはダメなのか?
あ、図=グラフとは限らんか・・・

詳細ボタンを押せばパッとひらく今(想像)よりはレスポンスは落ちるが、
ブックが開くのも速くなるしシート数も減ってスマートになると思うんだが・・・
「テンプレ案」

・質問する人は可能な限り具体的に書いてね。
・コード(プログラム)を晒すと、なおヨシ。
・質問を小出しにすると、大抵遠回りになります。
・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。
・回答がなくてもキレないで。
・分かる人はできるだけ回答して下さいませ。
・書き込む前に推敲して、回答する人にわかりやすい文章に汁。
題名:

OS:
EXCELのバージョン:

本文:

なんてのを2辺りに張っといて、使ってもらえば?

936デフォルトの名無しさん:03/05/29 19:53
VBA最近始めたけどかなり面白いね!
結構何でもできるし。
これ覚えたらアクセスなんていらなくなりそうだよ。
てか、アクセスの機能のうちでエクセルVBAで実現できないことってあるのか?
937デフォルトの名無しさん:03/05/29 20:12
>>936
いろいろあるが、Excelは65535行までというのが一番いたい。
938デフォルトの名無しさん:03/05/29 20:13
65536だった、スマソ。
939デフォルトの名無しさん:03/05/29 22:49
>>936
ExcelとAccessじゃ、そもそも用途が違うからね。
VBAやってくうちにExcelの限界が見えてくると思うよ。
Accessがいらなくなるって・・・・オマエ・・・・
941デフォルトの名無しさん:03/05/29 23:35
Excelの限界って、具体的にはパフォーマンスのことですか?処理はいくらでも書ける気がします。
原則的に自動マクロを編集する方向でコーディング行うと、間違った方向で結果が出ることはないです。
作業効率UPの基本は「手順改善」「自動化」にあるので、「Excelでこれをやりたい!」と考えるよりも、
「今この手順でやっているが、これを自動で行う」とか考えた方がVBAとして良い結果が得られます。

ExcelVBAやってて助かることは出力を簡単に整形できること。こんなに使える「ツール」はないと思います。
なんでもできるExcelだけど、大量なドキュメントを作成/編集するときはWordのサブ文書等に頼りますが。


942デフォルトの名無しさん:03/05/29 23:41
>VBA最近始めたけど
もう手遅れだって......
>>941
便利な世の中になったもんだ。
>>942
そんなことないぞ。
945デフォルトの名無しさん:03/05/30 01:11
たぶんこの人>>941は、数日もしないうちに
また書き込んでくるであろう、疑問符をいっぱい抱えて。

Excelはね、たくさんコード書いてると、ヘンな動きをしだすんだよw
946動画直リン:03/05/30 01:13
947941:03/05/30 01:39
コンボボックスの挙動が変です。
Bookオープン時に取得しているのですがクリックすると描画がループします。
なぜでしょうか????????????????->->->->->->->>945
教えてください。
948デフォルトの名無しさん:03/05/30 03:36
>>941
なんか違うと思う。
おれもlVBAをかじりたての時はそう思ったけど。

Excelで処理すべき作業なのか、他のアプリで処理すべき作業なのか、
その見極めができるようになったら理解できると思う。

おれも最初は「Excel+VBA」が魔法のツールと錯覚し、何でもExcelで
処理してたな・・・
949デフォルトの名無しさん:03/05/30 06:34
おまいらの職場ではOfficeにちゃんとサービスパック当ててますか?
俺のとこは管理者がまぬけなのか、放置されてます。
おかげでMSのバグ回避用のコードが汚すぎです(号泣
最新のサービスパクてどれだっけか
951デフォルトの名無しさん:03/06/01 23:16
質問です。フォーム上の複数のテキストボックスのExitイベントに
同じプロシージャを実行させるコードを以下のように書きました。
--------------------------------------------------------
Private Sub textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Call サブルーチン(1)

End Sub

Private Sub textbox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Call サブルーチン(2)

End Sub

(以下省略)
--------------------------------------------------------
コントロールの数だけイベントプロシージャを記述すれば一応動作
しますが、数が多すぎて(20個あるので)あまりに非効率のような
気がします。このようなコードを一つにすっきりさせることは
可能でしょうか?よろしくお願いします。

952デフォルトの名無しさん:03/06/01 23:56
>951
たしかVBAはコントロール配列を作れなかったから無理
953951:03/06/02 07:42
>952
やはりそうですか。
Controls("Textbox" & i) のような擬似コントロール配列も
このような場合には使えないし。どうしてVBと共通の仕様に
しないのやら・・・
コントロール配列ってなんでつか?なにができるのでつか?
>>954
文字通り、コントロールの配列です。

同じ属性を持つコントロールを配列で管理すれば、コーディングの時に何かと
便利です。

例えばコントロールが10個あった場合、VBAの場合10個全てにユニークな
名前を付ける必要がありますが、VBの場合はコントロールを配列にすることで、
一つの名前で扱うことができます。

これにより、本来10個分のコードを書く手間を省略する事が可能になり、コードの
メンテナンス性が向上します(使い方によっては逆になる場合もある。そのへんの
事情は配列変数と同様)。

同じ属性のコントロールを一元に扱えるということは、イベントもまた一元に扱える
という事で、例えばコントロール配列Aに定義したイベントは、その要素である
A(1)、A(2)…に対しても、同じように作用します。952の回答は、これがVBAでは
出来ないという事を意味しているのです。
VB.NETでは無くなったけどね
957デフォルトの名無しさん:03/06/02 11:13
>>956
へー、じゃぁどうやるの?ってすれ違いかな
Visual Basic .NET と Visual C# .NET におけるコントロール配列の作成
http://www.microsoft.com/japan/msdn/vs/general/vbtchCreatingControlArraysInVisualBasicNETVisualCNET.asp
>>951
調べてみたところ、ユーザー定義クラスを利用すれば出来ないこともないらしい。
以下テキストボックスが5個の場合の例。

'UserFormのモジュールに書くコード
Option Explicit
Option Base 1

Dim myClass1(5) As New Class1
Private Sub UserForm_Initialize()
  Dim myTextbox As New Collection
  Dim i As Integer
  With myTextbox
    .Add Item:=TextBox1
    .Add Item:=TextBox2
    .Add Item:=TextBox3
    .Add Item:=TextBox4
    .Add Item:=TextBox5
  End With

  For i = 1 To 5
    Set myClass1(i) = New Class1
    With myClass1(i)
      .txt = myTextbox(i)
      .Index = i
    End With
  Next
End Sub
'Class1モジュールに書くコード
Option Explicit

Private WithEvents myTxt As MSForms.TextBox
Private idx As Integer
Public Property Get txt() As MSForms.TextBox
  Set txt = myTxt
End Property
Public Property Let txt(ByVal txtNew As MSForms.TextBox)
  Set myTxt = txtNew
End Property
Public Property Get Index() As Integer
  Index = idx
End Property
Public Property Let Index(ByVal idxNew As Integer)
  idx = idxNew
End Property
Private Sub myTxt_Change()
  MsgBox "textbox(" & idx & ")を変更しました"
End Sub

このコードを使うと、テキストボックスを変更した際にChangeイベントが発生し、
メッセージボックスにテキストボックスコレクションのインデックス値が表示される。

ただ自分が試した限りでは、何故かExitイベントが発生しないのだが、原因は
私の力不足により不明です。申し訳ない。
961デフォルトの名無しさん:03/06/02 19:52
Javaでクラスに慣れ親しんだ後に、VBでクラスを組むと気持ち悪い。
中途半端だし。更に、VBAはCollection使わないと凝ったことは何一つできないという罠。
可変長配列の代替としてCollection使うのは良いことだ。可読性UPするしな。
962預言者:03/06/02 21:38
963951:03/06/02 22:47
>>959
おお、これなら確かにちゃんと動作しますね。
しかしなぜExitイベントだと動作しないのか・・・謎です。
今までクラスモジュールは触ったことがなかったのですが、
使いこなせれば色々と便利なことができそうですね。
959さん、どうもありがとうございました。
>>963
VB/VBAのクラスはオブジェクト指向のクラスとしては足りない機能がおおいけど、
むしろイベント制御用として割り切って使うこともいいんでは
Excel/VBAでコードを書いてて、ちょいとわからなくなったことがあったので
ヘルプを見ようと思って開いたら、すべての項目がなくなってました・・・
これは、再インストール以外に解決策はあるのでしょうか?
>>965
俺だったら真っ先に再インストールするね。
何か事情があるなら無理かも知れんけど。
質問です。
Excel2000で印刷の用紙サイズをB4やB5に設定するとき
PageSetup.PageSize に xlPaperB4 または xlPaperB5 と設定しますが、
OKI ML2030N ではエラーが発生します。

マクロの記録で調べたところ、OKI ML2030N では
B4/B5の設定値が xlPaperB4 や xlPaperB5 ではなくて
122 と 127 になっていました。
この値はプログラムからはどのようにして調べるのでしょうか?

はじめまして、VBA3日目の初心者です。

====================
Sub

A()

End Sub
--------------------
Function A
     ???
End Function
=======================

関数の???ところでエクセルを終了させずにマクロ全体から抜ける方法がわかりません。
今のところ、関数AからBool値をSubに戻して判別してるんですが、
何か便利な関数があるはずだと思うのです。
ヘルプ探したのですが、見つかりませんでした。
もしよろしければおしえていただけませんか?よろしくお願いします。
>>968
Exit Function
ちゃんとヘルプ嫁
どうもです。
いやー、てっきりExit Functionでは関数から抜けるだけだと思ってました。
マクロからも抜けれるんですね。
早速試してみます。
>>968

やっぱだめでした。関数から抜けるだけでした。
探してるものは、いわばFunctionの中でつかえる、Exit Subなんですが。
972969:03/06/06 08:24
>>971
End

マクロ全体から抜けるなどという概念がなくてな
>>972
思ったとおりにいけました。どうもありがとうございました。
Range の CopyFromRecordset メソッドで Range のある Worksheet では
なくて ActiveSheet の Range の位置の NumberFormatLocal が変わって
しまうというバグを見つけたんだが、こんなデカいバグがパッチ当てられて
いないほど DAO って使われてないのか?
975一応テストコード:03/06/07 02:09
Sub test()
Dim dbnam As String
dbnam = ThisWorkbook.FullName & ".dbo"
If Dir(dbnam) <> "" Then Kill dbnam
Dim db As Database
Set db = DBEngine.CreateDatabase(dbnam, dbLangGeneral)
Dim table As TableDef
Set table = db.CreateTableDef("data")
table.Fields.Append table.CreateField("date", dbDate)
db.TableDefs.Append table
db.Execute "insert into data values ('2003/06/01')"
db.Execute "insert into data values ('2003/06/02')"
db.Execute "insert into data values ('2003/06/03')"
Dim rs As Recordset
Set rs = db.OpenRecordset("select * from data")
Dim ws As Worksheet
Set ws = ActiveSheet
Dim wsData As Worksheet
Set wsData = ThisWorkbook.Worksheets.Add
ws.Activate
ws.Cells(1, 1).NumberFormatLocal = "G/標準"
ws.Cells(1, 2).NumberFormatLocal = "G/標準"
ws.Cells(1, 3).NumberFormatLocal = "G/標準"
wsData.Range("a1").CopyFromRecordset rs
Application.DisplayAlerts = False
wsData.Delete
Application.DisplayAlerts = True
Debug.Print ws.Cells(1, 1).NumberFormatLocal
Debug.Print ws.Cells(1, 1).NumberFormatLocal
Debug.Print ws.Cells(1, 1).NumberFormatLocal
End Sub
あ、バージョンは97と2000と2002 (10.2614.2625) で確認。

参った・・・一応、CopyFromRecordset の実行中だけ Activate でデータの
シートを ActiveSheet にしたら問題は回避できることは確認した。
でも、今まで気付かずに使いまくり・・・
あー確かに。

仕様と言い張るにはちょっと苦しい動作ですね。
なんかね、曜日を求めるプログラムってよくあるじゃないですか
でね、俺もちょっとやってみようと思ったんだけどサンプルのソース通りにコーディングしたのにコンパイルできないんですよ
↓のソースってどこが間違ってるんですかねぇ〜
ちなみにエラーメッセージは"Sub または Functionが定義されていません"だって。何のことやら
やべぇ、ソース長すぎて書けないんで分割して書きます

Private Sub CommandButton1_Click()
Dim mt(12) As Integer
mt(1) = 31: mt(2) = 28: mt(3) = 31: mt(4) = 30
mt(5) = 31: mt(6) = 30: mt(7) = 31: mt(8) = 31
mt(9) = 30: mt(10) = 31: mt(11) = 30: mt(12) = 31
y = Val(TextBox1.Text)
m = Val(TextBox.Text)
d = Val(TextBox.Text)
If (y Mod 4) = 0 And (y Mod 100) <> 0 Or (y Mod 400) = o Then
mt(2) = 29
Else
mt(2) = 28
End If
zure = y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400
days = 0
For k = 1 To m - 1
days = days + mk(k)
Next k
week = (zure + days + d - 1) Mod 7
If week = 0 Then
TextBox4.Text = "Sunday"
ElseIf week = 1 Then
TextBox4.Text = "Monday"
ElseIf week = 2 Then
TextBox4.Text = "Tuesday"
ElseIf week = 3 Then
TextBox4.Text = "Wednesday"
ElseIf week = 4 Then
TextBox4.Text = "Thursday"
ElseIf week = 5 Then
TextBox4.Text = "Friday"
ElseIf week = 6 Then
TextBox4.Text = "Saturday"
Else
TextBox4.Text = "Error"
End If
End Sub
982デフォルトの名無しさん:03/06/09 14:53
>>978
どこでエラーが出ているのかな

オレだったらこんなコードにする。
Private Sub CommandButton1_Click()
Dim strWeekday()
strWeekday = Array("", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
If IsDate(Me.TextBox1.Value) = False Then
MsgBox "日付が誤っています。"
Me.TextBox1.SetFocus
Exit Sub
End If
If (Me.TextBox1.Value <> Format(Me.TextBox1.Value, "yyyy/mm/dd")) And _
(Me.TextBox1.Value <> Format(Me.TextBox1.Value, "yyyy/m/d")) Then
MsgBox "日付が誤っています。"
Me.TextBox1.SetFocus
Exit Sub
End If
MsgBox strWeekday(Weekday(Me.TextBox1.Value))
End Sub
983デフォルトの名無しさん:03/06/09 16:05
>>978
日本語のエラーメッセージもわからんのか?
984:03/06/09 16:58
死ねよ
>>984
正論だろ

親切にmkという関数は定義されていませんよと反転付きで教えてくれてるのに
>>985
どこを直せばいいのかきちんと書け
そして死ね
だから反転してるところだって
どう直せばいいのかと聞いてるんだ
死ねよ低脳
>>978
まず、先頭に以下のコードを追加してコンパイルしろ
Option Explicit
990デフォルトの名無しさん:03/06/09 19:06
変数mとdに同じテキストボックスの値を代入したり、
y Mod 400と変数oを比較したり、
突っ込みどころ満載だな、釣りですか?
991 :03/06/09 19:06
>>988
えっれーでかい態度 (w
>>989
コンパイルエラー 修正候補:ステートメントの最後だとよ、どういうことだ?
いい加減なことばっか教えてんじゃねぇよ、死ねよ

てかね、釣りも何も俺は見本通りにソース書いただけなんですよ
文句言うならそいつに言え
さぁ、引き続きサポートしろよ
>>988
じゃあヒントだけ教えてやろう。

"Sub または Functionが定義されていません"というメッセージはまあそのまんまの
意味なんだが、未定義のSubやFunctionを使った覚えがないのにこのエラーが
出るということは、単なるタイプミスの可能性が濃厚だ。

というわけで、上で宣言している配列変数あたりが疑わしい。つかそれだ。
てかOption Explicitって先頭に追加したら赤くなったぞ
いい加減なことばっか教えてんじゃねぇよ、死ねよ
てかタイプミスなんてあり得ません。
何万回も確認したけど俺は間違ってないからな
てかプログラミング講座気取りのサイトでも間違ったソース載っけてるバカが結構多いからな
このソース乗せてる奴もその一人なんだろうな
死ねよ
オラ、俺が次スレ立ててやったぞ
貴様ら、こっちへ来い↓
http://pc2.2ch.net/test/read.cgi/tech/1055153917/
ここはバカと一緒に1000まで埋めるスレとなりました
>>996
別にいいのに
てか一年かかってようやく1000かよ
とんだ過疎スレだな、死ねよ
俺が1000げっと
死ねよ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。