1 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:34:58 ] 過去スレ 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/
445 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:16:35 ] "09*.xls"
446 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:53:18 ] まぁ、スピードが要求されるならC++でDLL書いてVBAから呼べって話になるんですがね
447 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:02:08 ] そういう問題じゃねーのまだ分ってねーの 計算量のオーダが2乗ってことだよ
448 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:04:49 ] ほら 1+2+3+...+n=n(n+1)/2=n**2+1/2*n
449 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:28:51 ] 流れを無視してすみません VBA初心者ですが質問させてください Userformでの話なのですが ボタンが押された際に TextBoxにセルの値を代入し表示 2秒間隔をあけ、その後フォームを閉じる という処理を行いたいのですがTextBoxに表示される前にフォームが閉じられてしまいます。 フォームが閉じられる前にTextBoxにテキストを表示させるにはどのような方法をとればいいのでしょうか? サンプルコードは以下のとおりです。 Private sub CommandButton1_Click() TextBox1.text = sheets("sheet1").range("A1").value call delay(2) '2秒ディレイするという命令 Unload Me endsub 分かりづらいコードで申し訳ないですがご指導のほどお願いいたします。
450 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:40:23 ] >>445 ありがとうございます!!
451 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:43:48 ] どうしてもその自作関数つかうなら delayのほうに 閉じる動作書けばいんじゃね
452 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 23:09:19 ] >>447 .NET Framework使えよって話だ
453 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 00:17:06 ] >>449 ontime
454 名前:デフォルトの名無しさん [2010/02/28(日) 00:40:48 ] VBAで指定されたURLに日本語をくっつけてWebを開く事は出来ますが そうではなくて 開いたWebページのあるテキストボックスに選択されたセルにある文字列を入力して ボタンを押下する方法とかはあるのでしょうか? もしあればご教授お願いします
455 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 01:10:19 ] >>454 Sendkeys
456 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 11:21:20 ] >>449 DoEvents を使ってみるといいかも TextBox1.text = sheets("sheet1").range("A1").value DoEvents call delay(2) Unload Me
457 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 01:46:21 ] テキストファイルA.txtの内容をstrAとし、 テキストファイルB.txtの内容をstrBとし、2つを合体させて クリップボードにコピーしようとしています。 strA も strB も、それぞれ読み取れてはいるのですが、 strA & strB とすると前者の方しかコピーされません。 逆にしても同じです。 &でつなぐことはできないのでしょうか?
458 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 02:42:09 ] >>457 よくわかりませんが、先に strAB = strA & strB したり、そこで文字列結合関数を使ってみては?
459 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 19:14:57 ] nul文字混入
460 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:00:35 ] Worksheets("225構成銘柄(業種別分類)").Range(Cells(2, 1), Cells(2, 2)) = Worksheets("水産").Cells(3, 3) これでアプリケーション定義またはオブジェクト定義のエラーです。が出るのは何でだ? もしかしてシートまたいでのコピーっていちいちactiveにせないかんの? 簡略表記できないの?
461 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:50:10 ] >>460 1. Worksheets("225構成銘柄(業種別分類)").Activate Range(Cells(2, 1), Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value 2. With Worksheets("225構成銘柄(業種別分類)") .Range(.Cells(2, 1), .Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value End With 3. Worksheets("225構成銘柄(業種別分類)").Cells(2, 1).Resize(1, 2).value = Worksheets("水産").Cells(3, 3).value お好きなのをどうぞ
462 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:22:41 ] なんか納得いかないけどありがとう御座います。 とくに2なんかwithで囲っただけでなんで上手く行くんだ?
463 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:52:33 ] >>462 RangeやCellsはシートを指定しないとアクティブシートを対象とする。 そのため460の書き方では、CellsのシートとRangeのシートが一致していない。 461の.Cellsはドッドが付いているため.Rangeと同シートを対象としているので動く。 と正しくないかもしれないけど勝手解釈な説明をしてみた。
464 名前:デフォルトの名無しさん [2010/03/03(水) 08:47:09 ] >>457 (strA & strB) としてはどうか
465 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 16:46:26 ] >>463 ふんわりと勉強になった。 知らん事だらけで困惑する。
466 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 20:11:36 ] 簡単に言うと、 Cells(2, 1), Cells(2, 2) ってのが、どこのシートのセルか指定されてないってことね。
467 名前:デフォルトの名無しさん [2010/03/03(水) 21:25:06 ] 現在VBAでエラーが出た場合 On Error GoTo ErrorHandler ErrorHandler: MsgBox "エラーが発生しましたので終了します" のように強制的に終了させていますが これだとどこでエラーが起こったのかわかりません。 しかしこれをはずすとVBAの画面が出てきてしまうのでそれは何としても避けたいのですが いわゆる実際の開発現場での作業などで作成される場合、 一般的にデバッグってどうやってされているのでしょうか? たとえば通過ログを各地にはりつけてこのログが通って、このログが通っていないので その間で落ちたと言うやり方が思いつくのですが、 あるいはこの部分で落ちたとかがわかるコードなどあるのでしょうか?
468 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 21:32:39 ] >>467 Debug.Assert(条件文)
469 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 21:40:30 ] Err.Description じゃなかったっけ? それみてエラー箇所が特定出来ないなら関数が大きすぎるんじゃないか?
470 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:22:40 ] >>467 とりあえずErrオブジェクトでぐぐれ エラーの発生した場所を正確に知るにはErl関数を使うという手もあるが 使い方がかなり面倒なのでおすすめはしない
471 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:28:40 ] ちがう Err.LineNumber
472 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:06:17 ] >>467 VBEのメニューバーにそのものずばり「デバッグ」てのがあるでしょ いちいちソースを書き換えなくても、どこまで実行したら一時停止とかできるんだよ
473 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:44:12 ] >>471 ErrオブジェクトにLineNumberなんてプロパティある?
474 名前:デフォルトの名無しさん [2010/03/04(木) 20:12:54 ] Excelにプルダウンを入れていて、いくつか選択肢を入れているのですが Excelを最初開いた時には空白で 別のシートを選択して、またこのシートに戻ってきた時に表示されます これの原因ってわかりますでしょうか? 初期化がうまくいっていない気がしますが どうしても理由が分かりません ちなみにコードとしては VBAプロジェクトの同じシートの中に下記の記述を入れています Private Sub Worksheet_Activate() With Me.Director_Combo .Clear .AddItem "" .AddItem "あああ" .AddItem "いいい" .AddItem "ううう" .ListIndex = 0 End With End Sub
475 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:22:51 ] >>474 ThisWorkbookのWorkbook_Openイベントに記述する シートの指定を忘れずに
476 名前:デフォルトの名無しさん [2010/03/04(木) 21:48:31 ] ある文字列中に.が何個あるか出力したいんですけど、どうすればいいですか? 例えば"1.25.30.2"ならば3を出力したいです。
477 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 21:59:28 ] >>476 単純に思いついたコードなんで間違ってたらすまん Dim wkArr() As String wkArr = Split("1.25.30..", ".") MsgBox UBound(wkArr)
478 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 22:11:36 ] あんまりスマートじゃないな s = "12.34.56.." Debug.Print Len(s) - Len(Replace(s, ".", ""))
479 名前:デフォルトの名無しさん [2010/03/04(木) 22:30:41 ] >>478 なるほど。LenとReplaceを組み合わせるんですね。 どうもありがとうございます。
480 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:01:38 ] Sheets(intS).Activate ActiveSheet.Range("C3:C100").AutoFilter Field:=1, Criteria1:=ANAME Range("C100").Select Selection.End(xlUp).Select If Selection.Value <> "あああ" Then Range(Selection.Offset(0, -2), "E4").Copy Sheets(intB).Activate Range("C100").Select Selection.End(xlUp).Select If Selection.Value <> "" Then ActiveCell.Offset(1, 0).Range("A1").Select End If ActiveSheet.Paste ← End If Selection.AutoFilter 矢印の部分でWorkSheet クラスの Paste メソッドが失敗しましたのエラーになってしまいます。 * Microsoft Visual Basic for Applications (VBA) マクロで、Excel 2003 ブックの 1 行全体のコピーと貼り付けを実行している。 * Microsoft VBA マクロで、Excel 2003 ブックの 2,516 以上の行の範囲のコピーと貼り付けを実行している。 のどちらにも当てはまっていないと思うのですが、なぜでしょう。
481 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:03:56 ] ごめんなさい書き忘れました。 Windows7 Office2007 です
482 名前:デフォルトの名無しさん [2010/03/07(日) 08:20:54 ] やってはいけないの見本
483 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 09:46:48 ] >>480 コピー元かコピー先のどちらかでセルが結合されてない?
484 名前:480 mailto:sage [2010/03/07(日) 17:31:48 ] セルの結合はないです。 PasteSpecialでも同様のエラーが出ます
485 名前:デフォルトの名無しさん [2010/03/07(日) 19:38:09 ] VBAを利用して Webページにある複数のテキストボックスに A1セルに書かれている内容をWeb上のAというテキストボックスに入力 A2セルに書かれている内容をWeb上のBというテキストボックスに入力 するような物を作りたいのですが やり方とかあるのでしょうか? あれば教えてください
486 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 20:22:08 ] >>485 IEオブジェクト.Document.フォーム名.テキストボックス名.value = 設定したい内容 フォーム名やコントロール名が無い場合 DocumentオブジェクトのFormsコレクションやItemコレクションを使う IEオブジェクト.Document.Forms(n).Item(n).Value = 設定したい内容
487 名前:デフォルトの名無しさん [2010/03/07(日) 21:56:28 ] A〜E列を下記。A,Dを検索キーとしてBをEに移します。 test()では1が拾えず10を拾ってしまいます。(XP, Excel2000) どう修正すればよいでしょう。 A B C D E -- -- -- -- -- 1 あ __ 1 2 い __ 2 3 う __ 3 9 け __ 9 10 こ __ 10 11 さ __ 11 14 せ __ 14 15 そ __ 1 Sub test() Set myRngA = Range("A1:A15") Set myRngD = Range("D1").CurrentRegion For i = 1 To myRngD.Rows.Count myKey = myRngD.Cells(i) Set myCel = myRngA.Find(what:=myKey) If Not myCel Is Nothing Then myRngD.Cells(i, 1).Offset(0, 1) = myCel.Offset(0, 1) End If Next i End Sub
488 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:49:54 ] >>487 Set myCel = myRngA.Find(what:=mykey, LookAt:=xlWhole)
489 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:54:31 ] 大量の日付+株価の四本値データ(1まとまりで5列使用)があるのですが、開始日も終了日も全てバラバラ(最長の奴で8192日データ。この8192日の中に全ての期間入ってる) 綺麗に日付の行をそろえて昇順でソートしたいのですが、VBAで上手いことやるアイデアを下さい。
490 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:29:40 ] >>489 ソートするって、四本値データが日付順にならんでないというのが不思議だが 同じ日付を同じ行に持ってきたいということかな? もしそうなら ビンソートでデータをビンに詰め終わったところで 空きビンに対応する日付データーを入れてやればいいんでないかな
491 名前:487 [2010/03/07(日) 23:38:31 ] >488 ありがとう。たすかりました。 LookAt:=xlWholeがないと、一行目が無視されるわけですね?
492 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:24:39 ] >>491 全然違う。 LookAt=xlWholeは完全一致。 これを書かないと初期状態ではLookAt:=xlPartの部分一致になる。 開始セルのAfter:=***を書かないと範囲の先頭の次から検索するので 部分一致で10がヒットすることになる。
493 名前:489 mailto:sage [2010/03/08(月) 01:37:33 ] ビンソートという用語初めて知った。情報有難う。 ソート自体は簡単なんだけど、データのスタート位置設定するの難しいわ。 日付が素直に+1日づつなら多少は簡単なんだけど、休場日とかのせいで日付が飛び飛びなのがうっとうしい・・・ 後学の為にVBAで処理したいけど、もう手作業でやるか?
494 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:57:54 ] SQL使えよ
495 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:36:05 ] SQLもビンソートも不明だったので。 @→一番長い日数入ってる列探して基準にする A→各銘柄からデータ取得開始日とって、基準を参考に貼り付け開始行を取得 B→貼り付け開始行を利用して切り取り貼り付け C→Aから繰り替えす みたいな普通の力技でなんとかしました。アドバイス貰ったのに全く生かせないでごめんなさい。
496 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 13:37:07 ] オートシェイプの検索アドインを業務の補助として作成中です。 一般的な実装はできましたが、よくばって検索値の前回値を使用できるようにしたい。 このような場合、前回値をどこに保存するのが一般的なのでしょうか? excelマクロ・xlaならではの保存方法等ないでしょうか? ないのであれば、別途保存用のシートに保存するか、またテキストファイル等に残します。 (あんまりエレガントじゃないきがして嫌です。) ご存じの方おりましたらご享受ください。
497 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 13:58:58 ] >>495 ビンソートよりもバケット(バケツ)ソートという名前のほうが一般的かもしれない 内容は 日付のラベルが付いたビンに対応するデーターを放り込んで 詰め終わったら、端から順に取り出す 今回はデータがもともと順並びしてるので、 結果的にあなたがエクセル上でやったことと同じ作業ですね
498 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 14:06:04 ] >>496 Excelはシートに保存するのがエレガントだと思います。
499 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:39:54 ] なんらかの関数で引数となるシート名が存在するかチェックしてるんだが シート数分Forでまわして同名シート見つけた時点でexitしてるんだけど シート枚数が多くて使用者のPCスペックが低いためか時間が結構かかってきているんだが なんかアドバイスない? さしあたって事前にシート名チェックするのやめて ダメならOn Error GoToで飛ばすようにしといたんだけど もっといい方法あったら教えてください
500 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:57:25 ] シート名チェックってそんなに時間かかる処理だっけ? 何枚くらチェックしてるの?
501 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 16:13:38 ] シートの存在チェックは、何かやってみてon error gotoが一番速い
502 名前:499 mailto:sage [2010/03/08(月) 16:22:21 ] >>500 50枚くらいなんだけどモバイル用ノートで CPUがセレロンなんだ・・・ >>501 やはりそうですよね まず実行してみてだめだったらon error gotoで 具体的エラー内容を探すように変えていきます。 ありがとうございました。
503 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:02:04 ] >>502 ん、通じたのかな?例えばIsWorkSheetExist()みたいな関数を作って、その中で on error goto NotExist a = worksheet("Sheet1").range("a1").value // (*) return true NotExist: return false をやれってことで、「何かやって」は(*)の行の内容のこと。 いろんな関数にon error gotoをばらまけってことじゃないよ。
504 名前:デフォルトの名無しさん [2010/03/08(月) 18:36:00 ] ADOつかってSQL使えば? 別にExcelのシートに対してもSQLで読み書きできるよ
505 名前:デフォルトの名無しさん [2010/03/08(月) 20:14:29 ] こんばんは。どなたか詳しい方教えてくださいませんか。 エクセルのマクロでCSVファイルを開く→編集→保存(CSV形式)までを自動化しているのですが、 保存時の文字コードをS-JISではなくEUC-JPにして保存したいのです。 色々調べたんですが使えそうなのがなかったので・・。
506 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:02:08 ] 保存した後で変換ツールに投げるとこまで自動化したらばどうよ
507 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:19:20 ] >>505 nkf.dll
508 名前:デフォルトの名無しさん [2010/03/08(月) 21:48:31 ] ありがとうございます。 nkf.dll を使ってみようと思います。
509 名前:デフォルトの名無しさん [2010/03/08(月) 22:44:29 ] 詳しい方に質問です。 ExcelVBAでシートに保護をかけて、変更して欲しくないセル(項目名など) をロックしています。 ただ、シートに保護をかけてしまうと、テキストボックスや線オブジェクト、 図形オブジェクトがdisable?になってしまって使用できなくなります。 何か解決する方法はありますでしょうか?
510 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:33:02 ] 保護の対象を細かく指定すりゃいいだろ
511 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:03:00 ] DrawingObjects:=False
512 名前:デフォルトの名無しさん [2010/03/09(火) 14:40:04 ] XPで2003を使用しています。 VBA初心者で調べつつ作成しましたが、思った動作になりません。 どうかご教示下さい。 仕入先マスタのシートで仕入先CDを重複しないよう、入力後に チェックをするようにしました。 (コードは次レスに貼ります) 【問題点】 If Not IsNumeric(Target.Value) Then Exit Sub を入れると、ターゲットが複数行の場合は動作してくれません。 上記のコードを削除すると、複数行を挿入したり、連続しない複数行を 削除した時に重複したと認識されてしまいます。 (emptyかNullが重複?) ※つづきます
513 名前:512 [2010/03/09(火) 14:42:31 ] ※つづきです Dim maxRow As Long Private Sub Worksheet_Change(ByVal Target As Range) With Workbooks("仕入管理帳.xls").Worksheets("仕入先マスタ") maxRow = .Cells(Rows.Count, 1).End(xlUp).Row ' If Not IsNumeric(Target.Value) Then Exit Sub If Target.Column <> 1 Then Exit Sub Set rngTarget = .Range("A2:A" & Target.Row - 1) Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole) If Not rngFind Is Nothing Then If Target.Row <> rngFind.Row Then Application.EnableEvents = False MsgBox ("仕入先CDが重複しています"), vbExclamation Target.ClearContents Application.EnableEvents = True End If
514 名前:512 [2010/03/09(火) 14:44:01 ] ※最後です Else Set rngTarget = .Range("A" & Target.Row + 1 & ":A" & maxRow) Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole) If Not rngFind Is Nothing Then If Target.Row <> rngFind.Row Then Application.EnableEvents = False MsgBox ("仕入先CDが重複しています"), vbExclamation Target.ClearContents Application.EnableEvents = True End If End If End If End With End Sub よろしくお願いします。
515 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:20:45 ] ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
516 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:58:01 ] >>512 Targetに複数のセルが含まれるときは、こうすれば一つずつチェックできる もちろんセルが1つでもエラーにはならない。Forの中を1回通るだけ For Each c In Target If Not IsNumeric(c.Value) Then Exit Sub Next c
517 名前:512 [2010/03/09(火) 16:25:12 ] >>516 出来ました!ありがとうございます! 1週間もあれこれ悩んでいたので、とても助かりました!!
518 名前:デフォルトの名無しさん [2010/03/09(火) 20:57:12 ] Excelに Craete AAA_TBL 〜 一行改行されて Craete BBB_TBL 〜 一つのシートにこういうデータがあった場合、 crateAAA_TBL.sqlファイルを作成して その中には Craete AAA_TBL 〜 crateBBB_TBL.sqlファイルを作成して その中には Craete BBB_TBL 〜 と分割したいのですが 分かりますでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 21:01:46 ] わけわからん、なにが起きてるんだ r=3 c=10 debug.print r , c if r=3 and c=2 then ........ elseif r=3 and c=4 then ........ elseif r=3 and c=3 then ........ elseif r=3 and c=2 then ....... elseif r=3 and c=10 then debug.print r , c debug.print "ここまで来た" end if 実行結果 3 10
520 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:00:52 ] Sub test() r = 3 c = 10 If r = 3 And c = 10 Then Debug.Print r, c Debug.Print "こないわけないだろ" End If End Sub
521 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:15:58 ] でも来ねえだもん、くまった
522 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:18:37 ] 省略せずに丸ごとソースを貼るかエクスポートしてどこかにアップしろ
523 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:20:24 ] if r=3 and c=2 then まったく同じ条件のIfが2つある。どうせほかにもタイプミスとかしてるに決まってる
524 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:44:29 ] デバッガでブレークポイント仕掛けてステップ実行しろよ
525 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:45:45 ] スマソ、自己解決した 頭のほうの if に不等号が入ってた 思い込みがあると目が見てても脳が見てないようだ
526 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:17:38 ] 無能には良くあること
527 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:37:20 ] 本当に>>523 が正解だったとは
528 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 06:46:48 ] 不等号が入ってたのは正解なので タイプミスではありません 見のがしです すいません、正確に言っておきたいもので(まげられないおんな風)
529 名前:デフォルトの名無しさん [2010/03/10(水) 07:34:21 ] ソフトのこと全く知りません。 そんな僕でもがんばればVBAは習得できるでしょうか?
530 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:13:26 ] はじめから知ってるやつはいねえからそこは心配ない あとはセンスしだい
531 名前:デフォルトの名無しさん [2010/03/10(水) 11:19:08 ] >>530 ありがとうございます。 超入門の本を読んでいるのですが、読み終わったらもう少し専門書を購入し読みながら、 他の人の書いたプログラムを解読しつつ勉強しようと思うのですが、 このやり方でいいのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 11:49:53 ] 人が言葉を覚えるとき最初はオウム返しから始まるでしょ プログラム言語もそれと似たようなもんですよ 書籍のサンプル等をガシガシ打ち込んでけば、身についていきます コピペではあんまり身につきません、コピペが早くなるだけです 手打ちでがんばってください 人の書いたプログラムの解析は自分で作るよりも大変ですから、 そこから入るのは無理があるように思います
533 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:49:45 ] >>531 そういうやり方&他人のコード解読法で一回挫折したので、その後検定取りの為の勉強したな。(VBAエキスパートスタンダード) アレは基本的に誰でも受かるように出来てるし、体系だって勉強出来るシステムになってるので基本は身に付くよ。
534 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 05:27:46 ] Excel VBAで、コピーしたセル範囲をペーストする時に列幅を変えずに貼り付ける事は 可能でしょうか。 コピーする内容にセル結合や罫線が含まれています。 どうかご教授下さい。
535 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 07:59:09 ] 列をコピー&ペースト
536 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 12:00:19 ] >>534 まず普通にコピペしたあと、同じ場所にもう一度形式を選択して貼り付け→列幅
537 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:03:47 ] B3セルに"私は花子ですわ"、B4セルに"私は太郎ですよ" があるとき、C3、C4セルにA列の2つの文字列を比較して違う部分を赤色にしたい。文字列の長さは同じとする。 で、次のように作ったんだけど、最後しか赤くならない。なんで? Sub 文字列比較() ' 文字列比較 Macro ' マクロ記録日 : 2010/3/12 ユーザー名 : xp Dim str1 As String Dim str2 As String Dim buf1 As String Dim buf2 As String str1 = Range("B3") str2 = Range("B4") For i = 1 To Len(str1) buf1 = Mid(str1, i, 1) buf2 = Mid(str2, i, 1) If StrComp(buf1, buf2, vbTextCompare) = 0 Then Range("c3").Value = Range("c3").Value & buf1 Range("c4").Value = Range("c4").Value & buf2 Else Range("c3").Value = Range("c3").Value & buf1 Range("c4").Value = Range("c4").Value & buf2 Range("c3").Characters(i, 1).Font.ColorIndex = 3 Range("c4").Characters(i, 1).Font.ColorIndex = 3 End If Next End Sub
538 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:32:35 ] 初歩的な質問ですがお願いします。 For If xxx then @の処理 Else Aの処理 End If Bの処理 Next xxxの場合、@の処理をした場合には、Bの処理をせずに 次のfor文へ行きたいのですが、elseの中になにを書けばいいでしょうか?
539 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:42:58 ] >>537 マクロの記録でやってそうだからわかりそうなもんだけど、 Range("c3").Characters(3, 1).Font.ColorIndex = 3 '花 Range("c3").Characters(4 1).Font.ColorIndex = 3 '子 Range("c3").Characters(7, 1).Font.ColorIndex = 3 'わ は続けてやらないとダメだと思う。 j = 0 For i = 1 To Len(str1) If StrComp(Mid(str1, i, 1), Mid(str2, i, 1)) <> 0 Then j = j + 1 ReDim Preserve s(1 To j) s(j) = i End If Next こんな感じで位置を先に取得してみては?
540 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:46:19 ] 連レスすまん。 >>538 Aの処理の次にBを書いちゃダメなの? For If xxx then @の処理 Else Aの処理 Bの処理 End If Next それか、エスパーぎみに答えるとSelect caseを使うとか??
541 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:54:58 ] >>537 これの意味を勘違いしているような Range("c3").Value = Range("c3").Value & buf1 セルc3の文字列を取出してbuf1の内容と文字列結合 → セルc3に上書き この処理をすると これ以前にあった色指定が無効となる つー事で >>537 を修正すると Sub 文字列比較() Dim str1 As String Dim str2 As String Dim buf1 As String Dim buf2 As String str1 = Range("B3") str2 = Range("B4") Range("c3").Value = str1 Range("c4").Value = str2 For i = 1 To Len(str1) buf1 = Mid(str1, i, 1) buf2 = Mid(str2, i, 1) If StrComp(buf1, buf2, vbTextCompare) <> 0 Then Range("c3").Characters(i, 1).Font.ColorIndex = 3 Range("c4").Characters(i, 1).Font.ColorIndex = 3 End If Next End Sub
542 名前:538 mailto:sage [2010/03/12(金) 21:03:38 ] >>540 ありがとうございます。 顔洗って出直してきます。
543 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:25:28 ] For If xxx then @の処理 Else Aの処理 Bの処理 End If Next
544 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 05:44:13 ] >>538 for x=1 to 100 if xxx _ then @の処理 else Aの処理 end if Bの処理 Next 次のfor分の処理 こう書くと Bの処理をコメントアウトすればいいんじゃねということがわかるけど Aの処理のあと”だけ”にBの処理をしたい、と言うこと?それとも 真ならば他の人のいうとおりだけど Bの処理はAの処理の前にしたいのか、後にしたいのかが不明確ですよ Bの処理がAの処理と独立ならば順不同だけど
545 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 06:06:19 ] VBAと関係ないね