1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
652 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:50:37 ] Dim time As Variant Function settime() As Variant time = Timer End Function Function gettime() As Double gettime = Timer - time End Function Private Sub Worksheet_Change(ByVal Target As Excel.Range) mytime = Format(gettime, "####.00") ThisWorkbook.Application.Caption = mytime End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) settime End Sub
653 名前:649 mailto:sage [2007/08/19(日) 21:34:16 ] >>650 ありがとうございます。Excelから切り離すってことはVBかなんか使って別アプリにしてしまう ということですよね?VBA以外やったことないんですが・・・これを機に勉強しようかな >>651 ありがとうございます。 あくまで入力作業中のおまけというかアクセサリ的なものとして表示させておくつもりだったので その発想はなかったです。試しにやってみたらフォーム上のtextboxへの入力中ならちゃんと タイマーを表示するマクロも動き続けますね。とりあえずこの方法でやってみます。 >>651 わざわざコードまで書いてもらって恐縮です。 言葉足らずで申し訳ありませんでしたが、入力確定後にかかった時間を表示するだけじゃなく 入力中もかかってる時間を表示させ続けたいのです。
654 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 21:45:48 ] >>639 エラーでます
655 名前:デフォルトの名無しさん [2007/08/20(月) 02:39:20 ] こんな有用なスレがあったんですね。 早速ですが、1つ教えてください。 Excelで、次のようなことがしたいのですが、どのようにしたら良いでしょうか。 ・事前に、ユーザーが新規ブックを開いておく ・そのままの状態で(ボタンなどを押すことなく) ・PCのCOMポートから送られてくる文字を、順番にセルに書き出す。 ボタンを押して....のようなイベントの発生による関数の起動ではなく、 COMポートの受信割込発生をイベントとした関数の起動がしたいのです。 現在は、 シート上に作ったボタンを押すことで、セルに書かれた数字/文字を、PCのCOMポートからRS232Cで送り出したり、 同じくシート上に作ったボタンを押すことで、COMポートを開いて受信状態となり、 数字/文字を受信したら罫表に書き込んだり などは、結構何度も作っているのですが、 今回は、「ボタンを押さなくても」自動的に受信できないかと思うのです。 何か特別な方法が必要でしょうか、あるいは、VBAの関数にすでに用意されているのでしょうか? 宜しくお願いします。
656 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 06:35:04 ] Private Sub Workbook_Open() 処理 End Sub
657 名前:デフォルトの名無しさん [2007/08/20(月) 21:11:30 ] 1,エクセルの左側にあらかじめ設定している列を折りたためる、ボタンがあるシートがあるんですけど、 どのように設定すればいいのでしょうか? 2、functionを使用して、同じ計算式をマクロに計算させようとすると、5倍位時間がかかるようになりました。 どのような対策を取ればいいのでしょうか?
658 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:21:42 ] 1 そのまんま。そのボタンに列の表示非表示を切り替えるマクロを登録すればいいだけ。 2 ワークシート関数よりユーザー定義関数の方が遅いのは当然だが、そういうことじゃないのか? 違うなら日本語で質問してくれ。あとそのFunctionの内容も書くこと。
659 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:26 ] >>657 1.グループ化の事か?
660 名前:631 mailto:sage [2007/08/21(火) 01:22:25 ] 本やみなさんの意見を参考にしながら一応、出来たのですが Sub セル範囲を指定して格子罫線を引く() Dim Rng As Range Set Rng = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) Rng.Borders.LineStyle = xlContinuous End Sub 少し、改造すれば、セル範囲を指定してセルの色を塗り替えるにもできます(せっかく、作ったので、良かったら参考にして下さい) これに、キャンセルしたときに「入力されませんでした」と表示するようにしたいのですが、どうもわかりません Sub セル範囲を指定して格子罫線を引く2() Dim jis As Range Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) If jis <> "" Then Rng.Borders.LineStyle = xlContinuous else msgbox"シート名が入力されませんでした" End If End Sub 上のソースだとエラーになってしまいます お手数ですが、ご指導お願いします。
661 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:33:33 ] サンプル Dim returnData As Variant returnData = Application.InputBox("データを入力してください", Type:=1) If VarType(returnData) = vbBoolean Then MsgBox "キャンセルされました" Exit Sub End If MsgBox "処理を続行します"
662 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:58:45 ] >>660 インプットボックスメソッドはエラー処理が必要 On Error Resume Next Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) On Error GoTo 0 こんな感じ。ヘルプ見てね! あと入力されなかった時はキャンセルにしてしまう場合 If jis Is Nothing Then Exit Sub
663 名前:662 mailto:sage [2007/08/21(火) 11:16:43 ] こんな感じかな? Sub セル範囲を指定して格子罫線を引く662() Dim Rng As Range Application.DisplayAlerts = False On Error Resume Next Set Rng = Application.InputBox( _ prompt:="セル範囲を指定後 [ OK ] を押して下さい。" _ & Chr(13) _ & "【セルを選択しないと [ OK ] は無効です。】", _ Title:="罫線を引くセル範囲を指定してください", _ Default:="", _ Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If Rng Is Nothing Then MsgBox "中止します" Exit Sub Else Rng.Borders.LineStyle = xlContinuous End If End Sub
664 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 17:59:15 ] >>660 あなたにとって自慢したい自信作かもしれないけど?敢えて苦言を >本やみなさんの意見を参考にしながら一応、出来たのですが 何もしないで、OKまたはキャンセル押したらエラーになるよね? これは「出来た」には程遠い!糸口がみつかった程度。 エラーが出るうちは未完成ですね >(せっかく、作ったので、良かったら参考にして下さい) 恐らく参考にならないでしょう Sub セル範囲を指定して格子罫線を引く2() ←コンパイルした? 宣言してない変数があるんだけど。 >If jis <> "" Then これはマズイよね、"" は文字列だから、変数 jis が String じゃないとエラー起こす。
665 名前:657 mailto:sage [2007/08/21(火) 22:49:15 ] >>658 回答ありがとうございます。 1、については、>>657 さんの回答で要領を得ました。 2、ワークシート関数よりユーザー定義関数の方が遅くて当然との事ですが、 なんらかの方法で、処理速度を上げられないだろうかとかんがえております。 内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)
666 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:28:34 ] >なんらかの方法で、処理速度を上げられないだろうかとかんがえております。 ワークシート関数を使え。 マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。
667 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:39:03 ] >マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。 遅いんじゃない? ワークシート関数をVBA上で使うと速いけど。 必要なデータは配列に格納し一気に処理(セル参照を頻繁にしないこと)が最速!
668 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:13:58 ] >>667 そうだね 速度重視ならワークシート上で計算しない設定に。もちろん数式は使わない セル参照も最小限に。理想は、 シート上の必要なデータを配列に一気に格納、 結果は全て配列に格納し一気にシート上に書き込む
669 名前:631 mailto:sage [2007/08/22(水) 00:30:23 ] >>661-663 わざわざ、ソースを全部書いて頂いて、本当に申し訳ありませんでした お騒がせしました
670 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 06:36:51 ] >>665 >内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。) 実際のコード晒してみれば? 具体的には、Cells( i ,j ) がコードに頻繁に出ると遅くなります。特にLoopの中は避けるべき。 私が始めて作った物は、データ取る為に2万回、書くために30万回、頻繁にCells( i ,j ) が... おまけに Selectしまくってましたので 処理が終るまで30分以上かかってましたが、つくり直したら20秒ほどで出来た!
671 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 11:45:58 ] エクセルでバイナリエディタって作れますか?
672 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:30:58 ] もちろん作れるよ
673 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 18:03:10 ] >>672 ありがとう!
674 名前:657 mailto:sage [2007/08/22(水) 21:00:20 ] >>666 出来れば、マクロ内で処理したいと考えております。 シミュレーションファイルを作成中でして、他セルにも複雑な式が入っているので、 単純な関数なら、マクロに放り込んでしまいたいのです。 >>667 >>668 配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。 >>670 function A(b,c,d,e) b=(c+d)/2 A=b*e end こんな単純な計算を、10〜20個織り込み、かつシート上で近似値を算出する計算式を使っているので、 時間がかかります。
675 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:20:16 ] >配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。 理由になってないんじゃない? 配列を拒否するなら私は手を引くよ!
676 名前:デフォルトの名無しさん [2007/08/22(水) 21:31:34 ] すみません。どなたかご存知でしたらお教えください。 VBAでsleepに該当する命令ってなんでしょうか? WSHで、WScript.sleep(250)みたいな感じでやっているんですが、 これをVBAでやりたいです。
677 名前:デフォルトの名無しさん [2007/08/22(水) 21:44:35 ] 319 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 16:08:34 ID:aEA9W/2t ttp://kissho2.xii.jp/20/src/2yoshi2512.7z.html 目欄 344 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 18:55:20 ID:YevU/rPG >>319 はウイルス。拡張子が怪しすぐる らき☆すた 27 sakura03.bbspink.com/test/read.cgi/ascii2d/1187586266/
678 名前:デフォルトの名無しさん [2007/08/22(水) 21:56:37 ] >>676 標準モジュールに Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
679 名前:デフォルトの名無しさん [2007/08/22(水) 22:07:05 ] >>678 ありがとうございます。できました。 こんなテクあるんですね。勉強になりました。
680 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:08:37 ] >>657 オレも >>656 Timer関数
681 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:10:12 ] ↑誤爆
682 名前:デフォルトの名無しさん [2007/08/22(水) 22:39:11 ] 恐れ入ります、質問を失礼します。 Dim st4 As String Dim r1 As Range, st4 = Mid(r(1).Offset(2).Value, 5, 10) & "-" & Mid(r(1).Offset(3).Value, 2, 10) こんな感じで13-1とか2-9といったst4にしたいのですが、 -の後が空欄の時があります。 そういったときは13-のようになってしまいますが、 -の後が空欄の時は13といったように-も表示させたくないです。 こういったことは可能でしょうか?
683 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:03:57 ] 可能です - は変数ハイフンに入れる Dim ハイフン As String 3個の文字列を無条件で&で結合せず IFで条件分岐してから結合すればよい ハイフン = "-" If Mid(r(1).Offset(3).Value, 2, 10) = "" then ハイフン = "" st4 = Mid(r(1).Offset(2).Value, 5, 10) & ハイフン & Mid(r(1).Offset(3).Value, 2, 10)
684 名前:デフォルトの名無しさん [2007/08/22(水) 23:12:03 ] >>683 おお、できましたぁ!!ありがとうございます!!! これでボクの仕事がかなり減りました、感謝です♪
685 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:16:40 ] while ブロックで breakって出来ないの?
686 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:47:11 ] Exit使えよカス
687 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:53:55 ] か、かすう? この俺様に向かって!
688 名前:デフォルトの名無しさん [2007/08/23(木) 00:06:25 ] いつもお世話になります、1点質問を失礼します。無理やり上司から頼まれましたが、自分には無理難題です。 @もし○○○○の後7文字全てが半角英数字だったら、このセルの5文字目〜半角スペースに当たるまでをコピー、「α」とする 例 ○○○○0120123456 ○ ↓ α=0120123456 ○○○○の後7文字に1文字でも全角文字が入っていたら、○○○○の一つ下の行の先頭から半角スペースに当たるまでを全てコピー「α」、さらに2つ下の行の先頭から「か」という文字に当たるまでをコピー、さらに○○○○から先の文字全てを繋げ「β」とする ○○○○あい12うえおあい 0120789123 ○○ Aか ↓ α=0123789123 β=Aあい12うえおあい できればifでやりたいんですが、 Dim α As String, β As String Dim r(1) as range '○○○○の行がr(1)とします If Mid(r(1).Value, 5, 7) = 全部半角英数字 Then α=Mid(r(1).Value, 5)から" "まで Else α=r(1).Offset(1).の先頭から半角スペースに当たるまで全て β=r(1).Offset(2).の先頭から「か」に当たるまでをコピー&Mid(r(1).Value, 5, 99) End if すいません、自分ifの文に弱いものでかなり違うかもしれませんが、こんなマクロにしたいのです。宣言とかの理論は理解してます。お手数ですが、よろしくお願いします。
689 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:21:56 ] >>688 >>7 文字全てが半角英数字 これって、記号類や半角カナはどうする? とりあえず、半角・全角の判定だけでいいか? それとも、英数字に限定?
690 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:30:25 ] とりあえず、半角・全角の判定のやり方だけど、 VBAには文字列の長さを調べる関数が3つある。 Len()、LenB()、LenMbcs() の3つ。 Len()とLenMbcs()の結果が同じ→全部半角 Len()とLenMbcs()の結果が違う→全角を含む と判定できる。 ただし、LenMbcs()はVBAには実装されてなくて、自分で書かないといけない。 書き方はMSDNに紹介されてる。 office.microsoft.com/en-us/access/HA012288741033.aspx Function LenMbcs (ByVal str as String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function LenMbcs()は、半角で1、全角で2を返す関数。
691 名前:デフォルトの名無しさん [2007/08/23(木) 00:35:39 ] >>689 失礼しました。 半角数字のみの時です、全角や記号や半角カナは×です。
692 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:50:08 ] 'とりあえず、文字列strが数字かどうか判定する関数。 もっと少ない行数の書き方もあるんだが、あえてわかりやすく書いてみた。 Function IsNumberString(str As String) As Boolean Dim i As Integer Dim c As String Const Number = "0123456789" For i = 1 To Len(str) c = Mid(str, i, 1) If InStr(1, Number, c, vbBinaryCompare) > 0 Then 'c が数字だったので何もしない Else 'c が数字ではなかった IsNumberString = False Exit Function End If Next i IsNumberString = True End Function
693 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:57:23 ] 'strの中にある半角スペースを探して、 'その手前までをコピーする関数。 Function LeftEx(str As String) As String Dim i As Integer i = InStr(1, str, " ", vbBinaryCompare) LeftEx = Left(str, i - 1) End Function
694 名前:デフォルトの名無しさん [2007/08/23(木) 21:25:50 ] 今週からエクセルを使う仕事に就いて昨日マクロにはじめて触れた 初心者で申し訳ないのですが ワークシートが2〜32まであり 各ワークシートのたとえばB5に以下のように入力したいのですが ワークシート2のB5に2007/8/1 ワークシート3のB5に2007/8/2 : ワークシート32のB5に2007/8/31 For sht = 2 To 32 Worksheets(sht).Select Range("B5").Select ActiveCell.FormulaR1C1 = "8/1/2007" + (sht-2) Next sht End Sub これでは当然駄目でした。 今週末になれば自分で勉強しますが できれば明日使いたいので よろしければ教えてくださいませ何卒
695 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:03:21 ] 俺の都合に合わせて、即答しやがれ糞共!! ってわけですか まぁそういうこと言う奴でも、こういう簡単な質問は 答えたくてウズウズしてる教えたがり厨が答えてくれるだろうけどw
696 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:08:02 ] Microsoft Access VBAの質問もここでおk? Accessのスレないんだものorz
697 名前:657 mailto:sage [2007/08/23(木) 22:45:14 ] >>675 失礼しました。
698 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:45:18 ] >>696 moug に逝った方がいいんじゃね?
699 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:46:18 ] 質問させてください。 VBA使って簡単な画像処理をしたいのですが、 画像の輝度値を求める関数って無いのでしょうか? よろしくお願いします。
700 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 00:31:35 ] >>695 わざわざ質問スレに出張ってきて こんな簡単な質問答えるやつは、 教えたがり厨だ!! ってわけですか?
701 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:08:05 ] >>694 未テストだがこんな感じ Public Sub SheetLoop() Dim wksSheet As Worksheet Dim dtDate As Date Dim intOffset As Integer Dim strbuf As String dtDate = "2007/08/01" For Each wksSheet In ThisWorkbook.Worksheets strbuf = wksSheet.Name If 2 <= CInt(strbuf) And CInt(strbuf) <= 32 Then wksSheet.Cells(5.2).Value = Format$(dtDate + intOffset, "yyyy/mm/dd") intOffset = intOffset + 1 End If Next Set wksSheet = Nothing End Sub
702 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:24:03 ] >>701 の注意点 シートの名称がイマイチ意味不明なのでとりあえずcintしたが、 これがSheet1とかのパターンが出てくると間違いなくエラーになるので、 isnumericで事前に回避するか、Sheet1系統でOKの場合は "Sheet"&カウントで文字列連結してstrcompで見てやる必要がある。 今後の注意点 ・1文字変数は使わない ・Activate,Select系は使わずオブジェクト経由でアクセスすること ・A1形式は極力使わない ・上記に伴いRangeを使う場面ではCellsで展開してから使用する ・セルに入れる値が日付や文字列や数値など、フォーマットが決まっている場合は 表示形式をNumberformatなどで事前に指定してやる
703 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:32:20 ] >>702 これって2月とかエラーにならね? 普通にDateAdd使えば?
704 名前:703 mailto:sage [2007/08/24(金) 01:33:57 ] うっは流し読みしすぎた >dtDate = "2007/08/01" で8月限定にしてんのか。すまん
705 名前:デフォルトの名無しさん [2007/08/24(金) 02:46:23 ] X軸の数値 Y軸の数値 0 -1.5e-9 10 2.5e-8 20 4e-8 30 5e-7 40 6e-5 50 9e-3 のようなデータををX軸は普通、Y軸を対数にしてグラフ化しようとすると、 負の数を入力しようとしています。対数には負の数が入りませんとかエラーが 出ます。(それは当然分かります) 強行すると、この場合、X軸が0の場合を除いてグラフにしてくれます。 動作としてはそれで問題ないのですが、大量にグラフを作成しようとすると、 毎回エラーが出てうざったいのです。なんとかエラーメッセージを消去 して出なくしたいのですが、いい方法はないでしょうか。
706 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 02:53:19 ] >>705 事前に負の値を取り除く。
707 名前:705 [2007/08/24(金) 03:00:08 ] >>706 やはり、そういう感じでやるしかないのですか・・・ 今はABSで絶対値にして逃げてるのですが。
708 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 05:38:20 ] そもそも負の値をとりうるデータを対数変換するってデータ処理としてどうよ?
709 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 07:38:02 ] >>707 それはおかしいだろう。対数を取りたいってことは負値はIllegalなんでないの? 或いは全体にオフセットを足すべきだったりはしない?
710 名前:デフォルトの名無しさん [2007/08/24(金) 11:13:05 ] EXCEL VBAでフォームを使用して、ユーザーに ファイルを選択してもらう仕組みを作りたいんですが可能でしょうか? 「参照」ボタンを用意して、ユーザーがクリックすると フォルダ内のファイルが一覧表示されて、指定できるようなイメージです。
711 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:05:25 ] 出来ますよ 必要なコントロールを配置して > 「参照」ボタンを用意して、ユーザーがクリックすると > フォルダ内のファイルが一覧表示されて、指定できる をコードにすれば良いだけです
712 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:06:32 ] >>710 Dialogsオブジェクト
713 名前:710 mailto:sage [2007/08/24(金) 13:12:05 ] >>711 ,712 ありがとうございました! ちょっと調べてみます!!
714 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:40:24 ] "俺の関数"というファイルにあるテーブルをVlookupした値を加工するユーザー定義関数を、"俺の関数.xla"の標準モジュールに作成しました。 他のファイルから"俺の関数"アドインを有効にしてみましたが、利用できません。どうすればいいですか? Public Function 俺の関数(key) fjFilename = "D:\Settings\俺\Application Data\Microsoft\AddIns\俺の関数.xla" 俺の関数 = WorksheetFunction.VLookup(key, Workbooks(fjFilename).Range("テーブル"), 2, 0)+1+2+3 End Function
715 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:10:50 ] >>710 Application.GetOpenFilename
716 名前:デフォルトの名無しさん [2007/08/26(日) 09:28:40 ] sv2.st-kamomo.com/loader/dat/file17227.42952.jpg ↑ 競馬の出走馬が並んだデータなのですが これをレースごとに他のシートにコピペすることはVBAで可能でしょうか? ちなみにレース場所は毎回異なります。
717 名前:デフォルトの名無しさん [2007/08/26(日) 09:33:42 ] 可能
718 名前:デフォルトの名無しさん [2007/08/26(日) 09:34:33 ] >>717 可能だとするとどう命令すべきでしょうか?
719 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:41:35 ] >>718 「やれ!」
720 名前:デフォルトの名無しさん [2007/08/26(日) 09:47:09 ] (・c_・` )ソッカー
721 名前:716 [2007/08/26(日) 11:23:09 ] マクロではできましたが今週の競馬開催の場所が毎回変わりますから そこができないですね・・・
722 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:50:17 ] 出来るけど、何か? 君が出来ないなら努力不足
723 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:54:41 ] >これをレースごとに他のシートにコピペすることはVBAで可能でしょうか? ↓ これをレースごとに他のシートにコピペすることはVBAで可能ですが、 どうやったらいいでしょうか?
724 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:09:18 ] マクロまでできたらそのマクロをいじれ どういじればいいかは学べ
725 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:20:18 ] 手でコピペは出来るんでしょ。 レースごとに分割する基準は何? それをマクロに書けばいいだけ。
726 名前:デフォルトの名無しさん [2007/08/26(日) 12:23:37 ] >レースごとに分割する基準 場所+レース番号 例) 札幌 9 または 馬番1〜大外枠 ・・・
727 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:45:05 ] まずシートを作って Sheets.Add ActiveSheet.Name = 場所+レース番号 例) 札幌 9 あとは判るだろ
728 名前:デフォルトの名無しさん [2007/08/26(日) 12:53:39 ] >>727 いやそれは分かるんだけどさ 競馬って毎週「札幌」があるわけじゃないのよ 10箇所以上の場所から2つ3つあるわけで・・・
729 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:04:45 ] 変数 ヘルプ これ以上書くことないな!
730 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:25:56 ] VBAマスターするコツってありますか? 反復演習・努力ですかね?
731 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:29:24 ] そもそも何を持ってマスターしたと言えるのか 誰もわからない(あるいは人によってマスターの基準が大きく異なる)ので、 誰もマスターしたなんて言わない。
732 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:53:26 ] 初心者用の1冊をマスターしても実用性はないよな
733 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 16:24:13 ] 最初は初心者用の入門書のとおりに実際に動かしてみる。 (一週間程度) 次は、簡単なオリジナルのコードを沢山作る。その際 他人に質問しないで自力で検索したりヘルプを見たりする。←最も重要 同時にVBA掲示板を閲覧し自分のレベルにあった質問で勉強する。 未だ、自分で質問はしない方が良いと思う。 (一ヶ月程度〜数年以上) そのうち、ヘルプを見れば理解できるようになる。このレベルになれば 他人に質問しても相手に失礼じゃないと思う。 スクール行ったって資格は取れるかもしれないが実力がつくとは限らない。 やる気があれば独学で十分だとおもう。
734 名前:デフォルトの名無しさん [2007/08/26(日) 16:46:44 ] 俺の頭脳じゃ100年経ってもできないっぽい 実現させるには達人に出会ってお金を出して作ってもらう他ないな・・・
735 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:08:50 ] >>733 それ以前に、一般機能をひと通り理解してないと無理じゃない?
736 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:14:25 ] 何を馬鹿なことを… 初心者用の本は斜め読み。 必要そうなとこだけを重点的に。 使いたいときだけさっと調べ(本屋、GOOOOOOOGLE) 出来そうじゃなかったらあきらめる。(どうしてもVBAでMSNメッセンジャー作りたいんです >< )
737 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:26:56 ] VBA本は初心者本ばかりか上級者向けとされている本ですら、 変数の命名規則が不明(どころか明示すらしない)だとか、見やすいコーディングを 考えないとか、速度に触れていないとか、後始末を省略してるとか、コレクションとか クラスの使用法が全く記載されてないとか、そんなのばっかだから、その手の本の まんまのコーディングはあんまり業務としての実用性はない Excelレガシー問題ってこういう本の氾濫が大きいと思う 結局、リファレンスだけあればいいってことになる
738 名前:デフォルトの名無しさん [2007/08/26(日) 18:35:13 ] 初心者はプログラム自体にとっつきにくさと わかりづらさから飽きがきやすいので かなり偏った内容でも、とにかく楽しく、とにかく簡単で 実際にプログラミングしてみて動かせるような本が好ましい。 サンプルのついた本は腐るほどあるけど 一生使いもしないような題材だと萎えるから そこのとこも吟味してほしい。
739 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:40:28 ] だからこそ>>736 なんだが。 それにね、途中で興味がなくなったらそれはそれでいいんだよ。 VBAは何かの手段であって目的じゃないはず。 C++やc#でもやればいいんだよ。
740 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:57:33 ] >>735 そうですね。 一般機能のIF関数やVLOOKUPを使いこなせない人は苦労しそうだね?
741 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:36:12 ] 自分に降りかかる/手が出せる範囲の仕事で滞りなく使えること。 VB「A」なら、↑でマスターしたって言っていいでしょ。 ということは「自分の仕事でVBA使って自動化/効率化したいこと」が 最高の教材になるんじゃないか? 職業プログラマの人は知らんけど。 もしそうなら別の言語マスターした方がよさそうだし。
742 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:30 ] VBAは簡単なのがいいね C言語に何度も挫折した俺でも使える VBにステップアップしようとしたけど.NET何たらになってて よくわからなくて結局VBAに戻ってきた
743 名前:デフォルトの名無しさん [2007/08/26(日) 22:12:14 ] With Worksheets(1).Range("a1:a500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues) Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With Loopんところでオブジェクトが無いとかって エラーになるんですけどなんでですか? 途中で違うFindするとcの方のFindが無効になっちゃうのでしょうか?
744 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:13:40 ] ちゃんと例外処理しろよ
745 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:22:45 ] Loop While Not c Is Nothing And c.Address <> firstAddress 両方評価してからアンドの評価するからアウト
746 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 06:58:40 ] きたねーコードだな
747 名前:743 [2007/08/27(月) 09:52:45 ] >743ですが、Findのヘルプに載っている 使用例に下記一行を加えただけです。 Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues) この一行が無ければ、動きます。 この一行を追記しただけでエラーになる理由が知りたいです。
748 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 12:55:18 ] なんで解らないのかが知りたいです。
749 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:11:31 ] >>747 むしろヘルプをコピっただけで エラーになる俺に動く方法を教えてけれ >c.Value = 5 をコメントアウトしないと >Loop While Not c Is Nothing And c.Address <> firstAddress のところで cがNothingだから c.Addrssがエラーになる Loopのなかに If c Is Nothing Then Exit Do とか入れれば問題ないけど これってヘルプが間違ってんの? それとも条件しだいでは問題ないの?
750 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:34:19 ] >>743 > Loopんところでオブジェクトが無いとかって > エラーになるんですけどなんでですか? エラーメッセージを正確に書き写せばいいのに。 簡単な英語もわからないと不便だね。
751 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:21:56 ] エラーって日本語だろ?
752 名前:デフォルトの名無しさん [2007/08/27(月) 20:16:40 ] 屁理屈ばっかごねてるヴァカ