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


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

Excel VBA質問スレ Part8



1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ]
ExcelのVBAに関する質問スレです

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

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

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

232 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 22:33:41 ]
トリップつけたら?ってことじゃね?

233 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 23:38:26 ]
いい加減、yの話題やめろよ

234 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 00:06:42 ]
うざすぎ

235 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 03:08:08 ]
エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか?

また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか?

236 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 05:20:37 ]
> エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか?
「シートに画像をドラッグした時に」というイベントが用意されてないから、
「ドラッグした」ら自動で処理するってのは無理
「シートに画像をドラッグしてからボタンを押したら」なら可能だが

> また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか?
可能だがExcelでやるべきことじゃないな
Excelでやるってことは、Excelとその警告マクロを作ったブックを立ち上げてないと警告文出ないわけだし
やるとすれば、「n日前」ではなく、「n日前以降、最初にExcelを立ち上げたとき」という条件になるかな

237 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 16:10:42 ]
前者:できない
後者:できない


238 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 17:37:16 ]
EXCEL関数についてお教えください

あいうえお(abc)
かきくけ(ほげほげ)
さしすせそたちつ(nekdk)

という行がありまして、()とその中の文字列だけを全部消したいです。
()は全角です。()内の文字、文字数数がことなるので置換が使えないでいます。。

239 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 18:02:25 ]
マッチコレクション

240 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 18:10:17 ]
>>238
>>1 ★2



241 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 21:03:02 ]
>>238

関数ではないけど
ツール→区切り位置で区切り文字を ( にすると
( の前後で別のセルに分かれるからそれではダメかな?

242 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 22:58:50 ]
 VBAで検索システム的なものを作っています。
行き詰ってしまったので何かアドバイスをいただければと思います。
OSはXPでエクセルのバージョンは2002です。よろしくお願いします。
 ブック内に「メイン画面」「情報A」「情報B」という3つのシートがあります。
「メイン画面」のB5セルに会員番号(K_Ban)を入力してマクロを実行すると「情報A」「情報B」から該当の会員番号に関する情報が「メイン画面」の任意のセルに代入されるというものです。
ただし「メイン画面」の形式の都合で、該当する「情報A」のうち、上から3件のみを出力させて4件目以降はカットしています。(下記コード参照)
「情報B」は「種別」という項目があり、「野菜」「肉類」「魚類」…などの分類が30種類ほどあります。
「情報B」についても、各種別毎に3件目以降はカットしたいのですが、行き詰っています。
すなわち、会員番号1について「情報B」は30件あり、野菜25件、肉類5件があるとすると
「メイン画面」には野菜3件、肉類3件分の情報を出力させたいのです。
また、種別については、今後随時変更があるので「種別毎に変数を設定して直接数える」のではないようなコードにしたいと思っています。

243 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 23:00:25 ]
Public Sub 検索()

Dim K_Ban As String
Dim MyRange As Range
Dim MyAddress As String
Dim cnt As Integer

K_Ban = Worksheets("メイン画面").Range("B5")
Set MyRange = Worksheets("情報A").Range("A1:A50").Find(K_Ban, LookAt:=xlWhole)
MyAddress = MyRange.Address
cnt = 8

Do
Worksheets("メイン画面").Cells(cnt, 3) = MyRange.Offset(0, 0).Value
Worksheets("メイン画面").Cells(cnt, 4) = MyRange.Offset(0, 1).Value
Worksheets("メイン画面").Cells(cnt, 5) = MyRange.Offset(0, 2).Value
cnt = cnt + 1

If cnt = 11 Then
Exit Do
End If
Set MyRange = Worksheets("情報A").Range("A1:A50").FindNext(MyRange)
Loop Until MyRange.Address = MyAddress
End Sub

244 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 23:25:44 ]
シートの構造書くか、Bookをどこかにアップ

245 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 08:41:27 ]
だよな普通

246 名前:y mailto:sage [2008/09/15(月) 11:18:44 ]
>>242

    |A列.     |B列.      |C列.      |D列.      |E列.      
01  | 0123456789|        .|        .|        .|        
02  |        .|        .|        .|        .|        
03  |        .|        .|        .|        .|        
04  |        .|        .|        .|        .|        
05  |        .|        .|        .|        .|        

シート内のデータ内容を説明するために、以前こんなテンプレを使っている人がいました。
「情報A」「情報B」シートの中身を、文章で説明するより楽だと思ったら使ってください。


247 名前:242 mailto:sage [2008/09/15(月) 13:54:22 ]
>>244-246
以下のようなシート構造で、種別→日付で並べ替えてあります。

A     B   C    D
番号 種別 データ1 データ2
1    肉類 豚肉  20080915
1    肉類 牛肉  20080912
1    肉類 鶏肉  20080801
1    魚類 その他 20080401
2    肉類 猪肉  20080905
2    野菜 その他 20080802


248 名前:y mailto:sage [2008/09/15(月) 16:03:53 ]
>>247
Sub Sample()
 Dim K_Ban As Long: K_Ban = Worksheets("メイン画面").Range("B5")
 Dim r As Long
 Dim shubetsu As String
 Dim shubetsuCnt As Integer
 With ThisWorkbook.Sheets("情報B")
  .Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter Field:=1, Criteria1:=K_Ban
  r = 2
  Do While .Cells(r, 1) <> ""
   If .Rows(r).Hidden = False Then
    If shubetsu <> .Cells(r, 2) Then
     shubetsu = .Cells(r, 2)
     shubetsuCnt = 1
    ElseIf shubetsuCnt < 3 Then
     shubetsuCnt = shubetsuCnt + 1
    Else
     .Rows(r).Hidden = True
    End If
   End If
   r = r + 1
  Loop
  .Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy _
   Destination:=ThisWorkbook.Sheets("メイン画面").Cells(8, 3) '←任意のコピー先セル
  .AutoFilterMode = False
 End With
End Sub




249 名前:y mailto:sage [2008/09/15(月) 16:04:42 ]
上のコードは、条件に合わない行を非表示にしていき、最終的に表示されている行だけを
「メイン画面」の任意のセルにコピーする、という考え方です。デバッガでステップ実行していけば、
不要な行が非表示になっていく様子がよく分かると思います。不便なところは改良してみてください。
なお、データは「種別→日付で並べ替えてあります」とありますが、見たところ「番号→種別→日付」で並んで
いますね。上のコードは、そう並んでいる必要があります。

他のやり方を提案する方もいるかもしれませんので、そちらも参考にしてください。

250 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 18:09:00 ]
先日行挿入について質問したものです。
C3で指定した値の行に行を挿入して、D3,Fj,D3で与えた値を挿入した行のHi、Fi,Iiに値を入れたいのですが、どこが間違っていますでしょうか、ご指摘お願いします。
Sub Main

Rows(Range("C3")).Insert

Dim i As Integer
Dim j As Integer
i = Range("C3")
Range("D3").Copy Destination:=Range("Hi")
j = i-1
Range("Fj").Copy Destination:=Range("Fi")
i = Range("E3")
Range("D3").Copy Destination:=Range("Ii")

END SUB
このように作ったのですが、うまくいきません。



251 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 18:39:29 ]
>>250
まず、Range("Hi")というセルの指定のやり方はない
Rangeを使いたいんなら、Range("H" & i )
ほかには、Cells(i, 8)、もしくは、Cells(i, "H")

解説サイトいっぱいあるから基本的とこから少し勉強したほうがいいよ

252 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 19:29:45 ]
エクセルの使い方もロクに知らない俺が
今日これからVBAの勉強を力尽きるまでやってみるぜ。
困ったときはお前らだけが頼りだ。

253 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 06:39:12 ]
>>251
ご指摘、解説ありがとうございます。
出来る限り自分でやるようにしてみます。

254 名前:242 mailto:sage [2008/09/16(火) 23:49:49 ]
>>248
ありがとうございます。
(もしかしたら上級者の方には普通なのかもしれませんが)
自分には全くない発想でした。勉強になりました。
お示しいただいたコードを元に自分でも勉強したいと思います。

255 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 00:16:06 ]
そう考えること自体は不思議ではないと思うよ。
現によその言語ではそういうことができるものだってある(Perlとか)。
いずれにせよVBAはそういうことをしないということに変わりはないけれど。

256 名前:デフォルトの名無しさん [2008/09/17(水) 01:45:49 ]
ねぇねぇみんな。
Microsoft Forms 2.0 TextBoxだと右クリックしてもメニューが出てこないよね。
出てくるようにしたいんだけど、何かいい知恵あるかな?

257 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 17:14:06 ]
すいません、質問です。

1004エラーが出ます。(´Д`;
worksheet記述を加えてみたり、色々試してみたのですが消えません。

作りたいものとしては、
A列を縦にチェックして異なる文字列が出てきたら罫線(太線)を引く、
というものです。
突っ込み、お願いします。

Sub test()
  Dim i As Integer
  Dim st_flag As Byte
  Dim range1 As Range
  
  st_flag = 0
  i = 3
  Do While Cells(i, 1).Value <> ""
    If (st_flag = 1) Then
      If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then
        Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium
      End If
    Else
      st_flag = 1   ''最初の1セルは比較をしない
    End If
    i = i + 1
  Loop
End Sub

258 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 19:04:30 ]
読むのめんどいからどの行でエラーなのか教えて

259 名前:デフォルトの名無しさん [2008/09/17(水) 19:37:16 ]
Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium

Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).Weight = xlMedium

260 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:29:58 ]
実行時エラー '1004':

Border クラスの LineStyle プロパティを設定できません。

これくらいコピペしようぜ



261 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:30:38 ]
時間の許す限りエラーの内容くらい小一時間考えよう

262 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:37:01 ]
質問者と回答者よりも講釈師の方がが多いスレ

263 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:21:15 ]
板全体に言えるわけだが
すれ違い甚だしい質問だとか煽りだとか
ここはまだまし

264 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:42:26 ]
>>262
質問者 回答者 講釈師
貴方はどれに該当しますか?

265 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:43:55 ]
ヌルポ

266 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:51:22 ]
ポルヌ

267 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:52:59 ]
>>262は煽り専門要員だよ

268 名前:y mailto:sage [2008/09/17(水) 23:26:36 ]
>>254
念のため補足しますが、>>248のコードは決して最善の方法ではありません。
合致する会員番号でふるいをかけ、その中から種別ごとに最大3つまでの
アイテムを取り出していく取捨選択の過程を、視覚的に理解するために利用してください。

仕組みが単純なので、コードが短くて済むというのが唯一の利点ですが、
マスタデータの行の表示・非表示を切り替えて実現する「検索システム」というのは、
>255でも指摘をいただいていますが、普通はやらないでしょう。
(数がたくさんになると、けっこう動作が重くなってしまいます)

まじめに実装するとすれば、取捨選択の考え方はそのまま生かすとしても、
転記の仕方に改良の余地があります。適当な二次元配列を用意して、
取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに
書き込む、というのが一般的なやり方になると思います。

>>256
TextBoxのMouseDownイベントプロシージャ内で、Commandbars("登録されているCommandbar名").ShowPopup を
実行すれば、そのタイミングで表示されます。ユーザー設定のショートカットメニューも表示できます。
ちなみにMouseDownイベント発生時は、Button引数 が 定数xlSecondaryButton と等しければ、右クリックと判断できます。



269 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:50:36 ]
さすがy

270 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 05:40:38 ]
うぜぇ



271 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 09:07:55 ]
>>257っす。

>>258
申し訳ないっす。ブレークポイントで調べてみたらここらしいです。
      If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then
→       Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium
      End If

>>259
うぉ、できました!
罫線の種類とか太さとか、指定する先が間違っていたのですね。

>>260
そこまで親切に表示されませんでした。orz
出てきたのは、
 実行時エラー '1004':
 アプリケーション定義またはオブジェクト定義エラーです。
でした。あ、verはexcel2003です。

>>261
小一時間考えて駄目だったので聞いてみました。orzorz
Cのコンソール系しか打ったことが無いので、感覚的につかめなくて。

ともあれ、無事にできたので。
ありがとうございました。m(_ _)m

272 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 14:26:11 ]
>>266

!ッガ

273 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 18:15:17 ]
>>242をわざわざVBA使ってまでやってる理由が分からんな…
関数だけで何とでもなりそうだw

274 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 19:42:37 ]
>適当な二次元配列を用意して、
>取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに
>書き込む、というのが一般的なやり方になると思います。

はぁ?
何でお前ごときが一般論を語れるんだよ?

275 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:49:36 ]
>>274
お前ごときがここにくんな

276 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 22:30:24 ]
今独学でVBAを学んでいます。
皆さんにお聞きしたいのですが、
独学で学ぶにお薦めの本はありますか?

大村あつし著 かんたんプログラミング EXCEL VBA基礎編
と できるシリーズのVBAを読んでいます。



277 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 23:40:24 ]
>>276
漏れの場合はVBAに関する知識はほとんどネットやヘルプで調べたものだったりするし・・・
VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う
便利なテクニックとかはネットで拾い集めて行く

最初に手に入れたVBAの本に載ってたサンプルがコンパイル通らなかったから
本は全然信用してないだけだけどなw
でも1冊だけ役に立った本があったな・・・
「Excel VBA逆引き大全」とかだったかな?

278 名前:デフォルトの名無しさん [2008/09/19(金) 01:19:38 ]
すいません。
VBA作成経験なく、ここを答えを求める場として
使うことに申し訳なく思っています。

複数のExcelファイルを指定する。
当該ファイルを新ブックにして保存する。
→その際、シート名が重複しても問題なし
 新ブックのファイル名はあらかじめ指定したものを

このようなマクロをつくることは可能でしょうか。
前述のとおり、まったく経験なしなので、
サンプル、たたき台程度で構いませんので、
ご教示いただけたら嬉しいです。

279 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 01:57:51 ]
相変わらずyきめぇw

280 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 02:05:09 ]
>>278
さっぱり意味がわかりません。



281 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 02:08:42 ]
>>277
>VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う
できる奴の戯言だな

282 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 04:03:48 ]
>>278
簡単だよ。

283 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:07:09 ]
>>275
アホ?

284 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:25:29 ]
>>281
いや普通できると思うできないのは文盲

285 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:26:23 ]
>>283
ゆとり乙

286 名前:デフォルトの名無しさん [2008/09/19(金) 06:37:00 ]
ここの奴ら「簡単」だの「出来て当たり前」だの口ばかり達者で
入門書レベルの事しか回答出来ないから笑える

287 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:43:18 ]
>>286
お前だろそれ

288 名前:デフォルトの名無しさん [2008/09/19(金) 07:01:00 ]
あらあらw

289 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:04:32 ]
vbogl.tlbのedxさんめちゃくちゃいい人だ。メールしたら速攻返事きたw


290 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:05:18 ]
誤爆した



291 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:06:03 ]

>>278
複数ファイルのブック内のシートを結合するマクロなら昔適当に作ったのがあるけど

292 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:52:57 ]
>>278
まとめると
複数ファイルのブック内のシートを結合する
シート名は重複している場合がある
だよな?
シート数は全部でどのくらいになるんだ?
あまり多いと1つのブックに収まらないよ

293 名前:デフォルトの名無しさん [2008/09/19(金) 09:10:07 ]
>>292
すいません、追加・変更があります。

○○システムの情報 ブック*2
□□システムの情報 ブック*2
(全部で5システム)

上記1ブックに1シートのみ

これをシステムごとに1ブックとして新規に保存。
なので、計5ブックができる。

これを一回でやりたいです。

下記の情報をあらかじめ指定(変更可)
- 各システムの情報ブック
- 新ブックの名前

を考えています。

294 名前:292 mailto:sage [2008/09/19(金) 10:40:41 ]
>>293
かなり手抜きだが書いてみた
コピー後のシート名は指定するように作った
マクロを入れるブックに
A列(ファイルバス)| B列(コピー後のシート名)
○○システム
C:\A1.xls| Sheet○○1
C:\B1.xls| Sheet○○2
C:\C1.xls
○×システム
C:\A2.xls| Sheet○×1
C:\B2.xls| Sheet○×2
C:\C2.xls

といった感じにデータ入れて以下のマクロを動かす
(AとBはコピー元Cがコピー先)

295 名前:292 mailto:sage [2008/09/19(金) 10:41:55 ]
Sub Macro1()
Dim wkAWorkbook As Workbook
Dim wkBWorkbook As Workbook
Dim wkCWorkbook As Workbook
Dim i As Long

For i = 0 To 1
With ThisWorkbook.Worksheets(1)
'コピー元1つ目を開く
Set wkAWorkbook = Workbooks.Open(.Cells(2 + i * 4, 1))
'1つ目を新規ブックにコピー
wkAWorkbook.Worksheets(1).Copy
Set wkCWorkbook = ActiveWorkbook
'コピーしたシートをリネーム
ActiveSheet.Name = .Cells(2 + i * 4, 2)

改行多すぎので次レスに続く

296 名前:292 mailto:sage [2008/09/19(金) 10:43:09 ]

'コピー元2つ目を開く
Set wkBWorkbook = Workbooks.Open(.Cells(3 + i * 4, 1))
'2つ目を上でコピーしたブックにコピー
wkBWorkbook.Worksheets(1).Copy after:=wkCWorkbook.Sheets(1)
'コピーしたシートをリネーム
ActiveSheet.Name = .Cells(3 + i * 4, 2)

'開いた時に見栄えが悪いので1つ目のシートを選択
wkCWorkbook.Sheets(1).Select
'名前をつけて保存
wkCWorkbook.SaveAs (.Cells(4 + i * 4, 1))
'終了処理
wkAWorkbook.Close
Set wkAWorkbook = Nothing
wkBWorkbook.Close
Set wkBWorkbook = Nothing
wkCWorkbook.Close
Set wkCWorkbook = Nothing

End With
Next i
End Sub

専ブラじゃないのでずれて見づらいかも知れんなw

297 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:49:06 ]
頭悪そうなコード

298 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:05:31 ]
変数名のつけかたって、読んだ参考書や勉強したサイトにけっこう影響されない?

299 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:08:44 ]
変数名のセンスが悪いな

300 名前:y mailto:sage [2008/09/19(金) 21:23:03 ]
>>276

「VBAの絵本」(アンク)
アンクの絵本シリーズは、その言語の仕組みや考え方を、豊富なイラストを用いて直感的に
伝える工夫がなされています。他人に薦めた本の中で、「分かりやすかった」という反応がいちばん
多かったのがこの本です。ACCESS VBAの内容も包括しているので、将来的にも役に立つでしょう。
概念の説明が中心で用例は乏しいので、メイン本にはできませんが、「かんたんプログラミング」を
持っているのであればそれで足りると思います。

「Excel VBAのプログラミングのツボとコツがゼッタイにわかる本〜最初からそう教えてくれればいいのに」(秀和システム)
「絵本」よりも実際性があり、個人的には一押しです。解説文と図の取り合わせがとても洗練されており、
文脈の多義性によるストレスや誤読を最小限に抑えようとする、手厚い推敲の跡が感じられます。新しい本なので
まだ他人に薦めたことはありませんが、アマゾンでは好評なようです。

「VBAポケットリファレンス」(技術評論社)
ヘルプがあればリファレンス本はいらない、という声もありますが、個人的には手離せません。
ページをめくるより、ヘルプを開いた方が速いような気もするかもしれませんが、
書式指定子の一覧、よく使うオブジェクトのプロパティ一覧など、よく開くページに
付箋を貼って机に置いておくだけで、パッと見たい時には最速のツールになり、ディスプレイも汚れないので
思考が中断されません。(※ただし、ヘルプを使って調べる習慣は、それはそれで必要です)

「逆引き」本(各社)
>276で既に上がっていますが、豊富な用例がほしい時は逆引き本です。ただ、「やりたいこと」をもとに
用例を探す場合、インターネット検索のほうがより楽な場合が結構あることも覚えておいてください。
「VBA + (やりたいことに関連するキーワード)」で検索すると、似たようなことを既にやっている人の
コードが割と簡単に見つかったりします。




301 名前:y mailto:sage [2008/09/19(金) 21:24:04 ]
他にも良書はたくさんあるので、上にこだわることはありませんが、ひとつだけ、初心者が解説書を選ぶ上で
ぜひ注意してほしい点は、VisualBasicEditorの使い方、特にデバッグの作法を丁寧に解説している章があるかどうかです。
ステップ実行、ローカルまたはウォッチウィンドウでの変数の監視、イミディエイトウィンドウからの介入、これらの意味を
早いうちに知り、使いこなせるかどうかが、その後の上達に明らかに影響します。


302 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:27:08 ]
たいしたデバッガじゃないからヘルプで十分だよ

303 名前:y mailto:sage [2008/09/19(金) 21:56:25 ]
>>273
Excel2007なら、オートフィルタの抽出条件で「上位○位まで」という設定が可能になったので、
それを組み合わせれば、フィルタだけで何とかなるような気がします。
ただ関数だけでやるとなると… いい方法が思いつきません。

304 名前:y mailto:sage [2008/09/19(金) 22:28:11 ]
すみません。>>300の「>276で既に上がっていますが」は、「>277」の間違いです。
さらに内容も、結構>277とかぶってしまっています。失礼しました。




305 名前:292 mailto:sage [2008/09/19(金) 23:27:08 ]
>>297
頭悪そうなレス

>>299
センスが良いネーミングをぜひとも教えてくれ


貶すことしか知らない無能って多いな

306 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:31:05 ]
あらあらw

307 名前:デフォルトの名無しさん [2008/09/20(土) 00:29:08 ]
先週金曜日あたりから突然会社のExcel2002がおかしくなった。ネットワークが切断されたかなんたらで、ファイルにアクセスできないやらなんたらというのがおきるようになった。
コンパイルするとファイルサイズが600kbから740kbになる場合とならない場合があり、(ソースはバックアップから同じ様にに変更したのに)大きくなった場合、実行すると強制終了になるという症状も現れた。
自宅の2003では問題なかったがためしに2002に変更。SP3を適用したまでは問題なかったが会社と同じバージョンになるよう、全部の更新を適用したところ同じ症状となった
ためしに最新のKB8951551を削除するとあっさり解決した・・。同じ目にあってる人いますか?
解決にいたるまでめちゃくちゃ苦労したよ・・・。(いやまだ会社のエクセルでは試せてないけど・・・)

308 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:39:41 ]
IDでないのにわざわざコテつけて煽るってなにこいつ

309 名前:デフォルトの名無しさん [2008/09/20(土) 02:37:18 ]
初心者です、お世話になります。
他の板で質問したあとに、こちらで質問すべきだったと気付きましたマルチポストですが勘弁してください。
セルA1とB1にそれぞれシリアル値による時間が入っています。
セルの書式設定により時間が表示されています。
ユーザーフォームの中のラベル1にB1からA1を引いた時間を時分秒の形で表示したいのです。
A1は開始時間、B1は終了時間、ラベル1は所用時間と考えてください。
Label1.Caption = Range("B1") - Range("A1").value
とやるとシリアル値っぽいのが出るのですが、時間を表示したいのです。
助けてくださいませ。

310 名前:デフォルトの名無しさん [2008/09/20(土) 03:58:49 ]
>>292
ホントありがと。
まったくプログラム経験なしだけど、
書いていただいたものをもとに
勉強含め動かしてみたいと思います。

感謝します。



311 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:40:23 ]
>>309
DateDiff関数でintervalに"s"を指定して秒単位の差分を取得、
後はそこから時分秒に分割して文字列に結合して完成、って所?

312 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:24:11 ]
>>305
一生そのままで朽ち果てろ

313 名前:デフォルトの名無しさん [2008/09/20(土) 10:14:55 ]
ジョン3兄弟

314 名前:y mailto:sage [2008/09/20(土) 13:55:32 ]
>>309

>311のやり方で可能ですが、他にこういう書き方も。
Label1.Caption = Format(Range("B1") - Range("A1"), "hh:nn:ss")


315 名前:デフォルトの名無しさん [2008/09/20(土) 16:18:39 ]
>>311>>314
アドバイスどうもありがとうございます。
テストをしてみたのですが、両方とも「’実行時エラー’438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
というエラーが出てしまいます。
私は知識不足なので対応がわかりません。
これは、どういうことなのでしょうか?

316 名前:デフォルトの名無しさん [2008/09/20(土) 16:35:45 ]
>>311>>314
失礼しました、できました。
ほんとうにありがとうございました。

317 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:35:44 ]
hh:mm:ssでなくて?

318 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:41:32 ]
nnでもいけるんだよね

319 名前:y mailto:sage [2008/09/21(日) 00:37:26 ]
そうですね。
書式指定子 "m" または "mm" は、時刻の分も表しますが、日付の月も表します。それによる混乱を回避するため、
分のみを表す指定子「n」が実装されている、という話を何かの本で読んだことがあります。
ヘルプには、「"h" または "hh" の直後、あるいは "ss" の直前に "m" を指定した場合、月ではなく分が表示されます」とあります。
逆に言うと、mだけを独立して使うと、分ではなく月を表します。つまり分のみを表示させたい状況では、どうしても「n」を使う必要があります。
そういうわけで、分は最初から「n」を使う習慣をつけておいたほうが、間違いが少ないように思います。


320 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:47:17 ]
うざ



321 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 03:56:03 ]
>>320
なんでこいつこのスレに粘着してるの?

322 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 08:47:58 ]
Excel 2009を使用しております。

テーブルを作成し、いくつか項目を入力した状態で、
GUIでテーブルの見出し行にある矢印メニューボタンを押した時に表示される
フィルタのメニューの処理を、VBAから行うにはどのようにすればよいでしょうか?

例えば、TODOリストを想像してください。
ボタンを配置して、ボタンを押すと、
テーブルの1つの列の「開始日付」が今日のもので、
「状態」列が「未完」となっているもののみを表示する。
また、他のボタンを押すと、元に戻る(というか全部表示)。
といったようなことをしたいのです。

画像を見てもらったほうが早いので、説明画像も作成しました。
sylphys.ddo.jp/upld2nd/pc3/src/1221954091856.jpg

どのようなクラスのオブジェクトにアクセスすればいいかだけでも、手がかりがあればと思います。

323 名前:y mailto:sage [2008/09/21(日) 09:13:13 ]
>>322
チェックを入れたり外したりする操作を、「マクロの記録」(>>1★6)を使って記録して、
生成されたコードを見れば、どんなオブジェクトにアクセスしているか手がかりが
得られると思います。

324 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 09:37:36 ]
>>321
うざいからだろw

325 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 09:42:50 ]
>>323
ありがとうございます。
基本的なことを聞いてしまった様な気がします。テンプレ嫁よ俺。

「開始日付」を「今日」のみ選択、「状態」を「途中」「予定」「スキップ」のみ選んだ時は、
こんな感じで記録されていました。

  ActiveSheet.ListObjects("作業記録").Range.AutoFilter Field:=2, Criteria1:= _
    xlFilterToday, Operator:=xlFilterDynamic
  ActiveSheet.ListObjects("作業記録").Range.AutoFilter Field:=1, Criteria1:=Array _
    ("途中", "予定", "スキップ"), Operator:=xlFilterValues

ListObjectsでListObject(テーブル)が得られて、そのRangeにAutoFilterをかますんですね・・・。

326 名前:デフォルトの名無しさん [2008/09/21(日) 15:51:36 ]
質問なのですが、
同一ファイル内で、シート1上の左側にはシート1の内容、右側にはシート2の内容
のように分割して表示することは可能でしょうか?
(ウィンドウを別々に開くのではなく)
もしやり方があるのであれば教えてください。
Excel2003を使用しています。

よろしくお願いします。

327 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 17:20:23 ]
スレ違い

328 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 20:07:05 ]
質問です。
-------------------------------------------
【やりたいこと】
(1).ファイル保存ダイアログでファイル名を選択させる。
(2).新規ファイル名を入力することも可能にする。
(3).ファイル保存時に選択可能なファイルタイプ(拡張子)をVBAで指定する。

【直面している問題】
・Office.FileDialog で msoFileDialogSaveAs を指定すると(3)を満たす方法がわからない
・Office.FileDialog で msoFileDialogFilePicker を指定すると(2)を満たす方法がわからない

【環境】
WindowsXp SP3 + Excel2002 SP3
-------------------------------------------
よろしくお願いします。


329 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 21:06:15 ]
>>328です。事故解決しました。
Excel.Application.GetSaveAsFilename
を使えばよかったんですね。

スレ汚し失礼。

330 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 00:40:37 ]
ExcelVBAって、.netよりもVB6に近いですか?




331 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 07:22:11 ]
うーん。その質問は難しいな。
似てるけど全くの別物と思っておいた方がいいよ。

332 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 13:31:46 ]
いやVB6とほとんど同じ






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

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

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