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/
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と関係ないね
546 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:50:59 ] Webクエリでデータを読み込んで加工するVBAを作成しています データの込みこみを待ってから次の工程へ行くようにするにはどうすればよいですか?
547 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 15:10:25 ] >>546 Do While IEobject.Busy = True And IEobject.ReadyState <> 4
548 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:47:47 ] こみこみ ← なんかカワイイ
549 名前:546 mailto:sage [2010/03/13(土) 18:59:55 ] ありがとうございます WebクエリとIEObjectの関係が分からないので、 もう少し調べます
550 名前:デフォルトの名無しさん [2010/03/13(土) 20:40:49 ] Cells.Replace What:="1", Replacement:="1", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 0から9までの全角数字を半角数字に変換したいのですが 上記を10回書くよりも これをfor文で回したいのですが 全角でというのか実現できません 教えてください
551 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:28:58 ] >>550 StrConv
552 名前:デフォルトの名無しさん [2010/03/13(土) 22:07:45 ] すみません質問です 以下のような数字の置き換えをしたいのですがどのようにすればいいでしょうか? <a name="1"> → <a href="hoge"> <a name="2"> → <a href="hoge"> <a name="3"> → <a href="hoge"> 〜 <a name="9999"> → <a href="hoge">
553 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:21:59 ] >>550 全角文字をループで扱うのはけっこう難しい。 文字コードを数値として扱う手もあるが、可読性が悪くなる。 プログラムの見栄えをすっきりさせたいなら、 配列に入れるか、置換のための関数を作るという手がある。 aryWhat = Array("0", "1", "2", ……
554 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:30:04 ] >>552 そういう場合は正規表現を使います。桁数の決まっていない数字は[0-9]+と書きます。 <a name=""[0-9]+""> とすれば、これ1行で1から9999までのすべてが検索の対象になるので、これをhogeに置換します。
555 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:33:35 ] >>550 ヒント Sub d() For i = 0 To 9 Debug.Print i, StrConv(i, vbWide) Next End Sub
556 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:34:43 ] >>554 ありがとうございます すごく助かりました
557 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 11:41:57 ] 別のエクセルファイルの標準モジュールに書いてある定数を読み込むには、 どうしたらいいでしょうか?
558 名前:557 mailto:sage [2010/03/14(日) 12:23:52 ] 自己解決しました
559 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 16:11:54 ] NO 品名 価格 数量 金額 1 りんご 100 3 300 ・・・ という連続したデータを NO 1 ・・・ 品名 りんご 産地 数量 3 ・・・・ というふうに転記させる方法を教えてください。 転記先のフィールドは、元のフィールド名のものがない場合もあり、 逆に元のフィールドに無いものが転記先にあったりします。 また、転記元や転記先のフィールドの順番は、入れ替わる場合があります。 うまいやり方がありましたら教えてください。
560 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 17:34:39 ] >>559 どうかな。 1行目に作業用の空白行を追加する。 転記元の左端から1セルずつ値を読み、右に移動するループ(セルが空白になるまで) 転記先の上端から1セルずつ値を読み、下に移動するループ if転記元の値と転記先の値が同じならば 作業用の行に転記先のセル位置を記入 (ここまでで転記先のセル位置を取得) A1 A2 A4 NO 品名 価格 数量 金額 1 りんご 100 3 300 あとは転記元のデータを1行ずつ処理。
561 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 17:39:05 ] >>559 新しいほうのデータの1レコード分の配列を用意する 古いほうのデーターから該当する配列の位置に読み込む 新しいデータへ配列から書き出す 以後レコード分繰り返し
562 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:22:14 ] 別のシートにセルを一個ずつコピーしていけばいいのでは
563 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:48:01 ] おれだったらVLOOKUPでぱぱっと片付ける
564 名前:480 mailto:sage [2010/03/14(日) 22:45:10 ] Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
565 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:15:40 ] Excel2007 Workbooks.Add で新規にワークブックを作成する際に オプション→数式で自動になるように作成することってできませんか? 今の状態は手動になっています。
566 名前:565 mailto:sage [2010/03/15(月) 18:09:02 ] 自己解決? 元のプログラムが入っているブックのオプションが手動になっていたので自動に変えたら 新しくできたブックも自動になってました。 なんか、自分自身をコピーして作ってるみたいな?(よく判りませんが w
567 名前:デフォルトの名無しさん [2010/03/16(火) 11:39:35 ] WinXP Excel2003 Sub Input_Date(ByVal iDay As String) ActiveCell.Value = CStr(iYear) _ & "/" & CStr(SpinButton1.Value) & "/" + iDay ActiveCell.NumberFormatLocal = ComboBox1.Value End Sub いまのままだと何処のセルにも入力するようになっています。 指定したセルにのみ入力するよう変更したいのですが、どこを直せば良いでしょうか?
568 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:59:16 ] >>567 ActiveCell
569 名前:デフォルトの名無しさん [2010/03/16(火) 16:40:50 ] VBAで、「どこぞのプロシージャ内で」、「別のプロシージャやイベントを設定・修正」するって出来る? 例えばBook/Formのロード時のイベントプロシージャで、 btn_test_1 btn_test_2 … btn_test_10 …って感じのボタン10個について、forで回してそれぞれのClickイベントに同一の処理を上書きさせる、とか。 それともクラスモジュール作って〜な やり方しか無いのだろうか? わかり辛い書き方でごめん。
570 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 17:54:28 ] 2003、XPです。 株のシストレの計算をやらせるのに、ブック2枚を頻繁に行ったり来たりさせるようなモジュールはやはり相当遅くなるのでしょうか? A:計算する元の四本値データだけ入ったブック。(シートが35枚あって、それだけで既に80MBのサイズ) B:Aから計算結果だけを出力させるブック。 一枚に詰め込むべきか、複数枚に分けて管理すべきか・・・
571 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:11:19 ] >>570 単にデータを読み書きするだけなら大して遅くはならない。 いちいちSelectとかActivateとかやっちゃうと遅くなるんで、そうしないように注意してプログラムを作ればいい。 あとは、オブジェクト型変数とかWith句をできるだけ活用すること。 計算中は余分なイベントを止めるのもそこそこ効果がある。
572 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:14:14 ] >>569 質問の1行目だけ見ると答えはNO。 だけどたぶん、別の方法でできることをわかってないだけの気がする。
573 名前:デフォルトの名無しさん [2010/03/16(火) 18:38:49 ] VBAでFX自動売買ソフトを作る事って可能でしょうか? やりたい事 ・業者orヤフー等からのレート取得 ・発注機能 こんな感じです
574 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:42:34 ] 可能です
575 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:46:01 ] 是非作ってみたい もしくはどなたかに作成していただきたいです MT4だと業者に対応していないので・・
576 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:00:54 ] プログラムもわからんのにそんな事言っててもどうしようもないと思うが んで、誰がただでやるわけww?
577 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:13:48 ] >>570 株価データの保存はDBに任せて、Excelは計算に専念させた方がスッキリすると思うけどね