[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/03 17:04 / Filesize : 336 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Excel VBA質問スレ Part7



1 名前:デフォルトの名無しさん [2008/06/04(水) 22:56:59 ]
すまんが2の人テンプレやって

ExcelのVBAに関する質問スレです

質問前に 【 >>2-3 】 あたりを良く読むこと

前スレ pc11.2ch.net/test/read.cgi/tech/1205231499/l50


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

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

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

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

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

152 名前:デフォルトの名無しさん [2008/06/15(日) 12:14:27 ]
>151
当方WindowsXPのExcel2003ですが、ちょっと確認。
セルC10に1バイト文字の a を入れているのか、2バイト文字の a を入れているのか、
区別してますか?
VBAソースにはどちらを指定していますか?
セルC10の隣(D10セル)あたりに =code(C10) の計算式を入れてみてください。


153 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:39:48 ]
1バイトのAでもaでも2バイトのAでもaでも動くようにStrConvとかLCaseとかいろいろ使えばいいじゃん。

154 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:54:07 ]
回答有難うございます。
>>152
>セルC10に1バイト文字の a を入れているのか、2バイト文字の a を入れているのか
これは区別しています。

>VBAソースにはどちらを指定していますか?
開いているすべてのブックに保存しています。
作業中のブックにするべきなのかも。

セルC10の隣(D10セル)あたりに =code(C10) の計算式を入れてみてください。
>やってみました。C10に100をいれると49が帰ってきました。
これが原因かも。codeについて調べてみます。

>>153
助言ありがとうございます。
調べてみますが、全くの初心者のためなんのことか分かません。
すみません。

155 名前:152 [2008/06/15(日) 18:19:46 ]
>154
C10セルに a を入れたらどうなるのかを確かめてほしかったんだけど。
それから
 >VBAソースにはどちらを指定していますか?
 開いているすべてのブックに保存しています。
 作業中のブックにするべきなのかも。
の件、誤解してます。VBAソースには a(1バイト)、a(2バイト)のどちらを
指定しているのかを尋ねたのです。ソースを記録している場所のことではありません。

あとは153さんが書いているように、大文字・小文字、1バイト・2バイトを
入れてもOKなようにするには工夫が要ります。153に示された関数(?)をググって
みてください。私もこの板を含むインターネットでずいぶん教えてもらいました。
がんばってください。

156 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:51:46 ]
> 大文字・小文字、1バイト・2バイト
Option Compare Textを使うと簡単お手軽な気もするが諸刃の剣
モジュール分ければいいだけの話だけど

157 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 23:43:19 ]
>>155,156
回答有難うございます。がんばってみます。

誤解していた件ですが、どちらも1バイトの文字に間違いありませんでした。
"a"ではなく、case 100 のように、数字で指定しても
case else 扱いになってしまうのです。

158 名前:155 [2008/06/16(月) 00:13:50 ]
>157
うーむ、なんだろ。
考えられる原因としては、C10セルに a_ (_は半角スペースと思ってください)と入力したか、
VBAソースの方の"a"の aの前後どちらか(あるいは両方)にスペースが入ってしまったか、
とにかく比較するふたつが一致しないといけない。
C10セルの書式をプロポーショナルではない(Pのつかない)MS明朝なりゴシックの大きめの
フォントに設定して、本当に1バイト文字になっているかを確認してみてください。

それから 100 は数字としてなのか 3文字の"100"なのかでも変わってきます。 case 100 と
あるのであればC10セルにも数字の 100 と入力しないといけません。
こちらのExcel2003で151のソースを貼り付けてちゃんと 総務部 と表示されたので、ソースの
内容に間違いはないはずです。


159 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:12:48 ]
>Select Case Range("C10").Value
>Case "a"

そのコードはちゃんとコピペでこのスレに張ったか?
この部分にスペルとか何か間違いないか?

160 名前:デフォルトの名無しさん [2008/06/16(月) 01:19:09 ]
出来損ないでスソマソン どうしてもIF文がうまくいかないでつ・・・

F3の値が6で割り切れないとき30行目を削除して割り切れたときはF4の値が6で
割り切れるかみて割り切れないとき40行目を削除ってこれじゃおかすぃ??

Sub limit()

If Range("I1").Value = 0 Then
Range("I1").Value = 1

If Range("F3").Value Mod 6 <> 0 Then
Rows("30:30").delete
Range("I1").Value = 1
Else
If Range("F4").Value Mod 6 <> 0 Then
Range("40:40").delete
Range("I1").Value = 1
Else
Rows("40:40").delete
Rows("30:30").delete
End If
End If
End If

End Sub



161 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:42:07 ]
Sub limit()

If Range("I1").Value = 0 Then

Range("I1").Value = 1

If Range("F3").Value Mod 6 Then
Range("30:30").Delete
ElseIf Range("F4").Value Mod 6 Then
Range("40:40").Delete
Else
Range("40:40").Delete
Range("30:30").Delete
End If

End If

End Sub

162 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:48:40 ]
>>151
シートの指定がされて無いけど、実行時のアクティブシートが違うとかは無いの?

163 名前:デフォルトの名無しさん [2008/06/16(月) 09:15:05 ]
>160
実行結果はどうだったの?

それから行削除の処理には関係ないけどI1セルへの無駄な代入文2カ所あり。

164 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:06:32 ]
Sheet1の適当なセルにhogehogeと書いて

Sub test()
Dim r
Set r = Sheets("Sheet1").Range("a1:z50").Find(What:="hogehoge", LookAt:=xlWhole, SearchOrder:=xlByRows)
Set r = Sheets("Sheet1").Range("a1:z50").Find(What:="hogehoge", LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByRows)
End Sub
を実行すると、
WindowsXP SP2, Excell2003 sp3では
1つ目のFindはちゃんと動きますが
2つ目のFindで
 実行時エラー'9' インデックスが有効範囲にありません
と怒られます。LookInを指定すると怒られるようです。

WindowsXP SP3, Excell2000では問題なく意図したとおりに動きます。
Excell2003でもLookIn:=xlValueを指定したいんですが、どうしたらいいですか?

165 名前:デフォルトの名無しさん [2008/06/16(月) 23:13:54 ]
>164
こちら(XP sp2 Excel2003 sp3)でも同様の症状を確認しました。
対策は・・・誰か詳しい人頼みます。

166 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:21:34 ]
LookIn:=xlValueをLookIn:=xlValuesとしてみなよ。


167 名前:164 mailto:sage [2008/06/16(月) 23:35:32 ]
www.nbcom.co.jp/PC-Support/FAQ/xls/tr/xls052004tr002.shtml

Excell2000で動作を確認しました。Excell2003での動作は明日確認します。

>166
ありがとう

168 名前:164 mailto:sage [2008/06/17(火) 21:43:36 ]
バッチリ動きました。
ていうか、LookIn:=xlValueで動くほうがおかしい。
もっと言えば、実行時エラーじゃなくて、コンパイル時エラーが出てもいい。
xlValueってグラフで使うやつらしい

169 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:45:25 ]
いや、ただの定数だし・・・

170 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:52:11 ]
>>169
定数を理解してたらこんなこと書かないって

>>168
イミディエイトウィンドウに
?XlValue
って打ち込んでEnterキー押してみ、正体分かるから



171 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:24:21 ]
>>164
俺はFindメソッドにxlValueを使ってたDQNを知ってる。
グラフが好きだったから使ってたんだろう。
たまたま動作が同じだからって、たとえばSpecialCells(xlCellTypeConstants)の代わりにSpecialCells(xlFilterCopy)なんてやったら
ヴァカって言われるよな。


>>169
彼が言うようにグラフで使うときのために用意された定数なんじゃない?
x;lAxisTypeクラスってそうなのかな?

172 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:30:53 ]
なんか164もDQNみたいな書き込みになったな。
すまんな

173 名前:169 mailto:sage [2008/06/18(水) 06:21:45 ]
>>171
何のために用意されたにしても、ただの定数。
結局、メソッドの引数が不正だったってだけの話なんだから
コンパイル時エラーじゃなくて実行時エラーなのは当然でしょ、って話。
引数には変数や式も使えるんだし。

174 名前:デフォルトの名無しさん [2008/06/18(水) 10:38:23 ]
最近VBAを触りはじめたのですが、全く分かりません

指定されたファイルがあれば、そのファイルを現フォルダから別のフォルダへ移動させたい。
指定されたファイルが無い場合はマクロを終了。

ファイルを別のフォルダへ移動はできましたが、指定されたファイルを探すのが上手くできません。

別のサイトへ誘導でもかまいませんので、教えて下さい。
よろしくお願いします。

175 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 11:14:01 ]
やだ

176 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:22:38 ]
>>174
Sub test()
If Dir("c:\tmp.txt") <> "" Then
MsgBox "存在します。"
Else
MsgBox "存在しません。"
End If
End Sub


177 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:34 ]
可能でしたらどなたか教えて頂けませんか・・?
Aエクセル起動時のUserForm1が起動して
他のエクセルに切り替えた時にそのUserForm1はHideします
その後、Aエクセルに切り替えた時に再びShowするのですが

UserForm1がアクティブになっているためAエクセルの編集を続行するためには
適当なセルをクリックしないといけません。
試しにShowする時にRange("A1").Select等を試すも結果は同じ

何とか解決する方法はありませんでしょうか?

178 名前:デフォルトの名無しさん [2008/06/19(木) 10:02:27 ]
>177
4行目の

その後、Aエクセルに切り替えた時に「再びShow」するのですが

この「再びShow」が問題では? Aエクセルの編集をするのであれば
「Hide」したままにしておけばいいだけでは?

それとも、
他のエクセルに切り替えた時にそのUserForm1はHideします
というのが、単に別アプリ(別のエクセル)が前面に出たから見えなくなっただけ
なのでは?


179 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 10:22:14 ]
例えば指定の曜日とかは自動的にフォントを赤にしたりできるけど、
やっぱりマクロでも祝日はムリかな?

180 名前:デフォルトの名無しさん [2008/06/19(木) 10:44:34 ]
>179
曜日は7日周期だから計算で機械的にもとめられますが、
祝日は機械的にさだまっていません。有名なところでは春分の日、秋分の日。
さらに祝日は法律で定まったり日付そのものを変更したり(成人の日、体育の
日、海の日など)とあるので、エクセルなどに実装するのは無理です。
なので、祝日をマクロで実現するには祝日(たぶん振り替え休日も含めてと
思うが)をリストにしておいてマクロで該当する日をチェックして、エクセル表
の該当する日付のセルの塗りつぶしを行うという手順になります。
リストを用意できるか、リストの変更をどう行うかがカギです。



181 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 11:48:55 ]
うい

182 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 13:50:15 ]
>>179-180
ttp://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA

183 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:36:23 ]
>>177です
この「再びShow」が問題では? Aエクセルの編集をするのであれば
「Hide」したままにしておけばいいだけでは?

UserForm1はAエクセルの作業時に役に立つボタン等を実装しているので
Showしておかないと不便なのです。。。

他のエクセルに切り替えた時にそのUserForm1はHideします
というのが、単に別アプリ(別のエクセル)が前面に出たから見えなくなっただけ
なのでは?

ちょっと当方の書き方が不十分だったのかもしれません
大前提としてAエクセルで作業中の時はUserFormはいて欲しく
他のエクセルに切り替えた時にはUserFormは不要なので
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
UserForm1.Hide
End Sub
で隠します、そしてAエクセルに戻した時には
UserFormは必要になるので
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
UserForm1.Show
End Sub
で、再び表示されるのですが、その時フォーカスは
UserForm側にいてセルにいないので
いちいち、セルをクリックしてフォーカスをセル側に切り替える必要がある
これが面倒なので、Aエクセルに復帰した時に
どうにかならないものか。。。。と思っています。


184 名前:デフォルトの名無しさん [2008/06/21(土) 03:40:55 ]
XP Excel2003での質問なんですが

If x = 1 Then GoTo LB1
ElseIf x = 2 Then GoTo LB2

と記述しているのに
「Elseに対応するifがありません。」と出ます。
間違っているところはどこなんでしょうか?
必要があれば追加文若しくは全文出します。


185 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 04:39:11 ]
>>184
Thenの後は改行してみたらどうですか


186 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 10:45:43 ]
>>185
おま…MSに消されるぞ

というかGotoなんか使うな

187 名前:186 mailto:sage [2008/06/21(土) 10:46:07 ]
>>185
>>184

188 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:47:40 ]
>>185
ありがとうございます!
その部分はそれで解決したっぽいです

189 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:26:30 ]
Sub Copytest()
Sheet2.Visible = xlSheetHidden
Sheet3.Copy after:=Sheet1
Sheet2.Visible = xlSheetVisible
End Sub

こうやるとsheet3(2)がsheet2の後に追加されてしまいます
Sheet1の後(Sheet2の前)にSheet3のコピーしたいのです

要は隠されてるシートの前にシートのコピーを挿入したいんです
今はSheet2のVisibleプロパティを一旦HiddenからVisibleに、
copy処理してから再びHiddenに戻すという方法をとってるんですが
もっとスマートな方法はないものでしょうか?



190 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 14:51:32 ]
>>186
俺はバンバン使ってたよ、20年前に、ポケコンで、懐かしい・・・



191 名前:デフォルトの名無しさん [2008/06/23(月) 18:07:07 ]
excel2007でマクロを今は亡きツールバーに登録するマクロが含まれるアドインを使ったら
消せなくなってしまった。消し方を教えてください。

この方法で追加したのを↓

Dim o_cmdbar As CommandBarControl

On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("あ").Delete
Set o_cmdbar = Application.CommandBars("Worksheet Menu Bar").Controls. _
Add(Type:=msoControlPopup)
o_cmdbar.Caption = "い"
With o_cmdbar.Controls.Add(Type:=msoControlButton)
.Caption = "う"
.OnAction = "え"
End With

本来はこれ↓で消すはずだった。
Application.CommandBars("Worksheet Menu Bar").Controls("メニュー").Delete



192 名前:デフォルトの名無しさん [2008/06/23(月) 18:08:24 ]
↑だけど追記で。アドインっていうリボンの中に作られたメニューを消したい。

193 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 19:49:14 ]
そりゃツールバーじゃなくてメニューバーだ
そしてそのコードじゃExcelのバージョンがいくつでもマトモに動かんよ

194 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:32:42 ]
>>189
ただ単純にbefore:=sheet2で解決しない?
ただし、実際に動作確認してないから分からないけど。

195 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:39:50 ]
>>194
実はそれも同じ結果になってしまいまして
どうしてもHideされたシートは自身の前位置を譲ってくれません
Worksheets.Addで追加する場合は問題ないんですけどね
なんなんだろう?

196 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:02:55 ]
>>195
じゃあ、コピー処理した後に並べ替え処理したらどうかな?

197 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:20:50 ]
ありがとう
並べ替えのループ処理に頼らなくても
一旦VisibleとHiddenを切り替えて、その間コピー処理することで一応解決はできてるんですが
なんだか不細工だなあと
仕様ということ納得します

198 名前:デフォルトの名無しさん mailto:age [2008/06/24(火) 18:16:18 ]
>>197
その気持ちわかる、俺も別の件ですっきりさせようとしたがむりで仕様ということで納得した

199 名前:デフォルトの名無しさん [2008/06/25(水) 22:00:12 ]

VBAでセルの色などを変えようすると”実行時エラー 1004”と出てしまいます。
シートを保護してますが、そのセルのロックは外してます。

他に何か原因はあるでしょうか?

200 名前:デフォルトの名無しさん [2008/06/26(木) 07:54:34 ]
その部分のソース貼れ



201 名前:デフォルトの名無しさん [2008/06/26(木) 10:05:57 ]
こんなです

Private Sub Worksheet_Change(ByVal target As Range)

'雇用形態のセル
Dim formRange As Range
Set formRange = Range("A1")

'雇用形態のセルを塗りつぶしなしにする
With formRange.Interior
.Color = vbRed
End With

'オブジェクトの解放
Set formRange = Nothing

End Sub



202 名前:デフォルトの名無しさん [2008/06/26(木) 10:49:48 ]
質問です。よろしくお願いいたします。

あるセルに設定されている「入力規則」の値を全て取得することは可能でしょうか。

203 名前:デフォルトの名無しさん [2008/06/26(木) 11:01:15 ]
>>201
シートを保護するときに、"セルの書式設定"のチェックを入れないとダメなんじゃ。

204 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 14:39:34 ]
>>203
2003とかならそうだと思う。状況からみて2003あたりを使ってそうだけど。
勘違いでなければ、2000あたりはそのチェック項目が無いような気がしたので、汎用性を持たせるなら一回シートの保護自体を解除して処理した方がいいと思う。
そして、処理終了後に再度、シート保護処理を実行する。

205 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 14:41:50 ]
>>201
処理と説明が合ってないよ。
塗りつぶしなしにするって書いてるけど、処理自体は赤くするになってるよ。

206 名前:デフォルトの名無しさん [2008/06/26(木) 16:15:33 ]
>>203
うまくいきました。
ありがとうございます。

>>204
やはり、その方法の方がいいでしょうか。
ありがとうございます。

>>205
すみません。


207 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:38:53 ]
二つのBookを用意して、呼び出し元から、呼び出し先Bookのシートにある
メソッドを実行したいと思いますが、出来ません。ご教授ください。



呼び出し元Book.xls
 Sheet1

Workbooks.Open Filename:="呼び出し先Book.xls"
Set wk = ActiveWorkbook

Call wk.Sheets(1).DoExecute() 'エラー

呼び出し先Book.xls
 Sheet1

  Public Sub DoExecute()
Msgbox "Hello"
End Sub



実行時エラー40036:アプリケーションの定義またはオブジェクト定義のエラーです。
と表示されます。



208 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:59:59 ]
俺の人生はエラーですがどうすれば直りますか


209 名前:デフォルトの名無しさん [2008/06/26(木) 17:49:55 ]
あるPublic関数を、ユーザー定義関数の用法でワークシート上から駆動させたとき、
関数内のWorkbooks.Openメソッドがうまく機能しない、という状況について、
ご意見を伺いに来ました。
ちょっと長文になってしまいましたが、聞いてください。

月ごとの売上データが保存されているExcelブックがあって、
それぞれ次のようなブック名で保存されています。
( 2007-04.xls, 2007-05.xls, 2007-05.xls … )
これらのファイル群から、ある特定の月の売上金額を抜き出す
Uriage関数を書いたんです。
たとえば #2007/4/1# を引数で渡すと、07年4月の売上金額が
戻ってくるような関数です。関数の中身はとても単純で、
1)渡された日付をもとにどのブックを開くべきか判断
2)そのブックを開く(Workbooks.Openメソッド)
3)必要な値を読み込む
4)ブックを閉じる
5)値をリターンする
という流れになっています。
この関数、他プロシージャから呼び出して使う分には、
問題なく動作し、なかなか便利です。
そこで、ユーザー定義のワークシート関数として使えるだろうか、
と思い、セルに次のように入力してみました。
=Uriage(2007/4/1)
しかし残念ながら エラー値 が戻ってきました。
処理をトレースしてみたところ、2)のところでブックが開きません。
どうやら、Workbooks.open メソッドは、ワークシート上の関数から
駆動させた場合は機能しないようなのです。
どうして、このような挙動になってしまうのでしょうか。
またこの他に、ワークシート上からではうまく機能しないメソッドを
ご存知の方はいらっしゃいますか。


210 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:39:18 ]
これかな
support.microsoft.com/kb/170787/ja



211 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 19:08:07 ]
>>208
一度、小学生にダウングレードして再起動

212 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:32:38 ]
ハァハァしかけたけど、野郎なのか。だったら市ね

213 名前:209 [2008/06/26(木) 21:55:59 ]
>>210

ありがとうございました。まさにそれです。
そういう仕様になっているということが
たいへん良く分かりました。

ちなみに、色々試してみたら、
テキストファイルのopen、read、closeは
ユーザー定義関数からでも上手くいくようですね。
Excelブックを開くより、読み込みがかなり速いので、
けっこう重宝しそうです。



214 名前:sage [2008/06/26(木) 22:10:15 ]
>>207
Sheetオブジェクトに記述されたプロシージャは、
そのSheetオブジェクト以外の場所からは呼び出せません。

他のブックからも呼び出せるプロシージャを作りたいなら、
まず標準モジュールを追加して、そこにPublic Subプロシージャを
記述します。

作ったプロシージャの呼び出し方については、
"Run"メソッドを検索してみてください。

215 名前:デフォルトの名無しさん [2008/06/26(木) 22:56:58 ]
A1からC1までをセル結合した状態でInputBoxを使用してA1〜A3までを選択した場合に、
A1:C3になるのですが、これをA1:A3と取得する方法はありますか?ご教授ください

216 名前:デフォルトの名無しさん [2008/06/26(木) 23:06:09 ]
優秀な方に伺いたいです!
あるブックのシートにあるデータを計算して、
他のブックのシートにその結果を出力したいのですが・・・

'結果を書き込むブック
Set objWb = Workbooks.Open(strFileName)

このようにオープンすると本当に立ち上がって見た目がよくないです。
裏でオープンして出力できる方法はないでしょうか?

どうぞよろしくお願いします。


217 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 23:14:13 ]
>>216
完璧に画面更新が止まってもいいならapplication.screenupdating=Falseを使用すれば開いてるところは見えないはず。

218 名前:デフォルトの名無しさん [2008/06/26(木) 23:25:25 ]
一つ教えていただきたいのですが、
12
24
35
46
2
34

とあった場合で、
最小値をこの中から探し出し、
その最小値の行番号を出す方法、
もしくは、載っている本を教えていただけますか。
お願いします。


219 名前:教えてください [2008/06/26(木) 23:30:34 ]
Excelが大好きな婦女子です。
もっぱらワークシート関数と記録マクロを駆使して
仕事で個人的に利用するささやかな入力フォームを作って楽しんでいますが、
最近ExcelのVBAとAccessに興味を持ち始めて独学中です。

そこで質問ですが、ExcelとAccessのVBAが使いこなせるようになったら
"プログラマ"として食って行けるでしょうか?
他の言語は全くわかりません。

現在のところ自分としてはOffice使いに毛の生えた程度の"プチグラマ"
だと思っています。

派遣社員でも、正社員でも構わないのですが、諸事情により
残業が月10時間程度しか出来ません。
VBAオンリーのプログラマでデスマ(すなわち残業)を避けて生きていくことは
可能でしょうか?

誰かVBAプログラマの現状を教えてください。

220 名前:デフォルトの名無しさん [2008/06/26(木) 23:30:35 ]
>>217
はい、ありがとうございます!
これを使ってなんとか工夫してみます!



221 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:49:59 ]
>>218
もっと簡単な方法があるかもしれないけど、俺はプロじゃないからすぐ思いつくのはこの程度かな。
もし良かったらどうぞ。変数も今、適当に付けたから分かりにくいのはごめんね。

Sub 最大表示()
Dim MyRow As Integer
Dim MyRng As Range
Dim Res As Integer
Dim AnsRow As Integer

MyRow = Range("A65536").End(xlUp).Row

Res = 0
For Each MyRng In Range("A1:A" & MyRow)
If Res < MyRng.Value Then
Res = MyRng.Value
AnsRow = MyRng.Row
End If
Next MyRng

MsgBox AnsRow, vbOKOnly + vbInformation, "結果"
End Sub




222 名前:デフォルトの名無しさん [2008/06/27(金) 01:14:34 ]
>>221

素早い回答ありがとうございます。
早速使わせていただきます。

223 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:22:57 ]
俺が婦女子だったら、VBAプログラマなんて、この世に生まれて来た
価値が何ら見いだせないような悲しい人生しないで、男に頼んで
バンバン子供産んで婦女子ならではの人生を謳歌するけどな。

224 名前:デフォルトの名無しさん [2008/06/27(金) 01:45:30 ]
>>221

早速参考にして、
作ることができました。
ありがとうございました。

225 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 10:23:26 ]
質問があります
VBAで一週間後の日付を出すやり方がありましたら
教えてださい。お願いします

226 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 11:41:23 ]
Sub test()

Range("A1").Formula = "=TODAY()+7"

End Sub

227 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 12:50:27 ]
ツールからマクロの記憶を使いグラフを3つ作成して、VBAで設定し表示する事が出来たんですが、全て同じ箇所、重なって表示してしまうんです。
個別に位置を指定して表示する方法ありますか?

228 名前:デフォルトの名無しさん [2008/06/27(金) 14:19:01 ]
セルに設定されている、「入力規則」を取得する方法を知りたし。

229 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:35:08 ]
>>227


'1つ目のグラフの位置設定(???は位置を示す数値)

ActiveSheet.ChartObjects(1).Top = ???
ActiveSheet.ChartObjects(1).Left = ???

'ChartObjects(2)、ChartObjects(3)に対しても、個別に位置を設定する。 


230 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:50:47 ]
>>228
vba validation moug で検索




231 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:57:33 ]
>>219
> "プログラマ"として食って行けるでしょうか?

> VBAオンリーのプログラマでデスマ(すなわち残業)を避けて生きていくことは
> 可能でしょうか?

無理、世の中そんなに甘くない

事務職で"ちょこっと重宝"されるくらいで"優遇"すらされない


VBAは君ごときでも使えることからも解るように、使える奴は婦女子の中にも腐るほど居る
他言語一切ダメで、基礎から学んだわけではなく行き当たりばったりで覚えたような奴なら尚更

まぁ、OfficeはOfficeでもVSTOを完璧に使いこなせたら、それだけで食っていけるけどな
それこそ残業云々どころか出社すらせず在宅労働で食っていける
とはいえ、身に付けるだけで食っていけるような技術は、君ごときが容易に手に出来るものじゃないけどな

232 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:13:55 ]
>>230
ありがとうございます!

233 名前:デフォルトの名無しさん [2008/06/27(金) 20:16:03 ]
Userformから呼び出したSubプロシージャ内で
処理を終わらせるにはどうしたらいいですか?

今は戻り値で判定するのに
functionで呼び出しています。

イベントプロシージャに戻らない方法を
教えてください。

234 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:41:24 ]
> 今は戻り値で判定するのに
> functionで呼び出しています。
その方法で良いわけだが

> イベントプロシージャに戻らない方法を
> 教えてください。
無いけど

なんでそんなことをしたがるのかねぇ
初心者の考えることはわからん

235 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:44:31 ]
Endじゃないの?

236 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:04:52 ]
233の説明通りならEndは違う

237 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:49:12 ]
XPとWin2000でexcel2000を利用しています。

ユーザーフォームのcommandbuttonではあまりに味気ないので
マウスクリックやエンターキーの両方でフォーカスを取得して操作できる
画像で出来たボタンを作りたいと考えています
(マウスオーバーで色が変わり、クリック時にボタンを押したような画像に差し換わる)

使えるイベントの都合的にframeに背景画像を指定するなどいろいろ考えたのですが
どうもうまくいきません(画像が切り替わらない・エンターキーを押しても他のコントロールに抜けられない等)
何かよい知恵もしくはもっと適切なコントロールオブジェクトはないでしょうか?

238 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:30:05 ]
>>224
ならよかったよ。
処理が最大値検索になってるのは意地悪したわけじゃないよ…。
最小値を勘違いして最大値で作っちゃった。ごめん。

239 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:03:14 ]
>>219
単価が安いのを我慢できるんなら。

>>231のように、必死で新規参入を妨害しないとやっていけないくらい、
誰にでもできるし、実際たいしたことない。

240 名前:デフォルトの名無しさん [2008/06/28(土) 05:59:40 ]
>>234
初心者ですみません。
代替案など教えて頂けないでしょうか?

よろしくお願いします。



241 名前:デフォルトの名無しさん [2008/06/28(土) 18:22:42 ]
H段の階段を「1段」あるいは「1段飛ばし」で上る。上り方は何通りあるか?
これはどのような構文を使ったらいいんでしょう?

242 名前:デフォルトの名無しさん [2008/06/28(土) 18:52:01 ]
VBAはプログラムじゃないだろ

243 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 18:52:27 ]
6段の階段なら
1−6段飛ばしの6通りってことか

244 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 00:15:51 ]
>>242
うん、VBAはプログラムそのものではなくプログラム"言語"だね
更に言えばプログラム言語の中のマクロ言語に該当するものだな

245 名前:デフォルトの名無しさん [2008/06/29(日) 08:06:57 ]
>>241
一段飛ばしする回数をnとすると
(n+H-n*2)!/(n!*(H-n*2)!)
通りになる
nを0からH\2までループして結果を足す

246 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 10:55:55 ]
>>243
アホスwwwwww

247 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:20:05 ]
>>233
呼び出された処理の最後で
Application.Quitすればいいと思う。
初心者のうちはけっこうこの命令を
知らないからね。入門書にも出てこないし。

248 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:53:22 ]
いいわけないだろ
ApplicationをQuitしてどうするよw

249 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:00:48 ]
>>248
IF文などの中で強制的に処理を打ち切るには
Application.Quitしかないと思う。
ExitSubだと呼び出し元に戻ってしまうからね。

250 名前:デフォルトの名無しさん [2008/06/30(月) 02:02:31 ]
マクロを編集する時に、例えば赤のフォントにしろと言われても色番号が分からないの
ですが、どうしたらいいでしょうか?
どなたか教えてください。



251 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 04:12:46 ]
>>250
例えば、A1を赤に塗ってみてイミディエイトウィンドに
?range("A1").interior.color
又は、
?range("A1").interior.colorindex
などと打ち込んでEnterキーを押してみる

252 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 11:03:07 ]
誰から赤のフォントにしろって言われるの?






[ 続きを読む ] / [ 携帯版 ]

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

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