onlyrom の回答履歴

全624件中181~200件表示
  • =LEFT(A9,LEN(A9)-1)上手くいきません?

    A9セルに1,330円 が表示されています。(ある物をコピ-して、テキストで張り付けた物です) この場合=LEFT(A9,LEN(A9)-1)をA10セルにいれれば、 1330と表示される予定でしたが?1330円と表示されてしまいます。 A10にどの様な関数を入れれば良いのでしょうか?

  • Excel VBEでActiveXコントロールの値を効率的に取得する方法

    エクセルシート状にActiveXコントロールのチェックボックス、テキストボックスを多数配したアンケートを作成しています。 <イメージ> 問題文 □回答候補1 □回答候補2 □回答候補3 自由記入欄 (テキストボックス) ※四角の部分が複数回答可のチェックボックスになっており、テキストボックスに自由記入をしてもらう形です。 複数人でアンケートを作成、改良しているため、追加や削除を加える必要から、オブジェクト名を任意に設定しています。 たとえば「TextBox11001」「CheckBox22010」といった形なのですが、問1の小問1の選択肢1、問2の小問2の選択肢10という意味であるため、番号は飛び飛びです。 電子データを配布し、回収後、全員分のデータを一覧表にするマクロを作成しています。 設問ごとに、チェックがあれば、1、なければ0、テキストはそのまま転記という形です。 (イメージ) 名前 問1-1-1 問1-1-2 問1-1-3 問1-2-1 問1-2-2 問1自由… ○○   1     0     1    0    1 コメント △△   1     1     0    1    0 コメント 集計表の見出しは設問が割り当てられており、 チェックボックス、テキストボックスがアンケートの順番に全て一行に並ぶように作っています。 開いた記入済みアンケートを次々と開いて(この部分は省略)のデータ(シート1~3がSht1~3、また集計用ブックにある集計シートがShtAと定義してある)を所定のセルへ転記するものです。 ShtA.Range("D14").Value = Sht3.TextBox321001.Text ShtA.Range("F14").Value = Sht3.TextBox321002.Text ShtA.Range("H14").Value = Sht3.TextBox321003.Text ShtA.Range("J14").Value = Sht3.TextBox321004.Text ShtA.Range("L14").Value = Sht3.TextBox321005.Text ShtA.Range("N14").Value = Sht3.TextBox321006.Text ShtA.Range("P14").Value = Sht3.TextBox321007.Text ShtA.Range("Q14").Value = Sht3.TextBox3210.Text If Sht1.CheckBox110101.Value = True Then ShtA.Range("C4").Value = 1 Else ShtA.Range("C4").Value = 0 End If If Sht1.CheckBox110102.Value = True Then ShtA.Range("D4").Value = 1 Else ShtA.Range("D4").Value = 0 End If If Sht1.CheckBox110201.Value = True Then ShtA.Range("G4").Value = 1 Else ShtA.Range("G4").Value = 0 End If 全問コピー&ペーストなどで、セル番地だけ入れ替えて作ったところ、作業自体はうまくできました。 しかし、設問や選択肢が多いため、同じような記述が300個ほど続いてしまい、非常に煩雑です。 もっと効率的に書く方法はないでしょうか。

  • Excel2007でBOOK間のシート移動をVBAで行うとエラーになる

    Excel VBAで開発されたソフトの改造を行ってますが、Excel2007で動作しないマクロがあり困ってます。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Microsoft Office2007) 改造元ソフトはOffice2000で開発されており、Excel2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままExcel2007で動作させるだけでマクロエラーが発生します。 発生する箇所はVBAで開発されており、下記のコマンドです。 Sheets(移動元シート名).Move Before:=Application.Workbooks(移動先ブック名).Sheets(1) 異常の内容は下記になります。 ------------------------------- ?err.Description 移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 ?err.Number 1004 ------------------------------- 移動元BOOKは1シート、移動先BOOKは1シートあります。 これをExcel2000で実行すると正常にシートが移動できます。 (移動元BOOKのシートがなくなりBOOKが終了して、移動先BOOKは2シートになります) Excel画面の移動元シートを選択して、右クリックメニューの「移動またはコピー」で移動先ブックを指定して移動すると 「移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。」 とVBAから実行した時と同じ内容のエラーダイアログが表示されました。 (Excel2000では手動でも移動できました) Excel2007では1シートで構成されたBOOK間の移動はできないのでしょうか? また、これをVBAで対策しようとした場合にどうしたら良いのでしょうか? ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • Excelマクロ(excel4.0)のTODAY関数で日付が正常に表示できない

    Excel VBAで開発されたソフトの改造を行っているのですが、初めてのVBAで悪戦苦闘しております。 Excel2000で開発されたソフトでマクロ(excel4.0)が組み込まれてますが、下記の方法で日付を表示すると"2004/10/7"と表示されてしまいます。 =FORMULA(TODAY(),!HIZUKE) 当たり前なのですが、下記だと"2008/10/8"と表示されます。 =FORMULA("2008/10/8",!HIZUKE) パソコンの時計は 2008/10/8 に設定されてます。 HIZUKEのセルの書式設定は「日付-2005/3/15」の種類で設定してます。 Excel2000とExcel2007で確認しましたが、同じ症状です。 違うパソコンで確認しましたが、改善できず困ってます。 原因がわかる方、ご教授いただけると助かります。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Office2007)

  • Excel2007のマクロ(excel4.0)のSELECT関数でマクロエラーが発生する

    Excel VBAで開発されたソフトの改造を行ってますが、Excel2007で動作しないマクロがあり困ってます。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Microsoft Office2007) 改造元ソフトはOffice2000で開発されており、Excel2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままExcel2007で動作させるだけでマクロエラーが発生します。 発生する箇所はマクロ(excel4.0)で定義されており、下記のコマンドです。 =SELECT(!選択エリア) マクロエラーの内容は下記になります。 ------------------------------- マクロエラー [dbg.xls]マクロ(excel4.0)BV28 ------------------------------- やりたい事はシートの特定の範囲を選択することです。 "選択エリア"は正しく定義されていることは確認してます。 (=シート名!$D$4:$CY$103 と定義してます) Excel2000やExcel2003ではマクロエラーが発生せずに正常に選択されます。 Excel2007のマクロセキュリティ設定を「すべてのマクロを有効にする」にしてます。 開発者向けのマクロ設定を「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックしても改善しません。 ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • 既存Excel VBAソフトがOffice2007でマクロエラーが発生

    初めて投稿させて頂きました。 Excel VBAで開発されたソフトの改造を行っているのですが、初めてのVBAで悪戦苦闘しております。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Microsoft Office2007 SP1 改造元ソフトはOffice2000で開発されており、Office2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままOffice2007で動作させるだけでマクロエラーが発生します。 発生する箇所はVBAコードで定義されており、下記のマクロ実行時です。 Application.Run ("macro1") マクロエラーの内容は下記になります。 ------------------------------- マクロエラー [dbg.xls]マクロ(excel4.0)BV25 ------------------------------- この「macro1」はVBAのコードにはありません。 Excelの開発タブのマクロ一覧にはあります。 マクロ一覧で「macro1」を選択して、"編集"ボタンを押しても、マクロ一覧画面が消えるだけで何も表示されません。 この「macro1」がどこに定義されているか調べても全く判らず、ここで質問させて頂いた次第です。 Office2000やOffice2003ではマクロエラーが発生せずに正常に動作します。 Office2007のマクロセキュリティ設定を「すべてのマクロを有効にする」にしてます。 開発者向けのマクロ設定を「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックしても改善しません。 Office2000やOffice2003では動作しているので「macro1」はどこかに定義されているのだと思いますが、VBAコードにはありませんでした。 マクロ一覧にありますが、マクロ一覧の編集ボタンを押してもマクロが表示されません。 このマクロ「macro1」はどこで定義されているか、ご教授して頂けると助かります。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • ExcelVBA キーイベント設定した関数が別のファイルで実行されエラーになります。回避する方法は?

    DELETEキーを拾うため、SheetのOpenイベントに Application.onkeyにて"DELETE"キーと呼び出し関数を 指定しています。 標準モジュールにて、呼び出し先関数を定義して 普通に処理出来ているのですが・・・・・ まったく関係の無いほかのエクセルファイルを開き DELETEキーを押下しても、同じ関数が呼び出されて しまいます。 (同じExcel.exeのMDIの一つとして起動されてしまった場合) 困った事に、シートのある特定の状態を見ている為 現状エラーメッセージボックスが表示されてしまいます。 回避方法は幾らでもあるのですが。 Googleで検索しても、OnError で処理していたり まったく何も考えてなかったり。 具体的な対応策が見つかりません。 現状シート名にて判断しようと考えておりますが かなりの数がある&シート名に制約が生まれる のでやりたくないんです。 何か一般的な回避策がありましたら教えて頂け 無いでしょうか。

  • エクセルで求めたセルの左隣りのセルの値を返したいです

    お世話になります INDEXとMatchを使い行の一番右(左から順にセルが埋まるので右端のセルが一定では無い)の値を返すようにしました。以下です。 しかし、一番右から2番目のセルの値(求めたものの左隣り)もほしいのです。 その場合はどうしたらよいのでしょうか? =INDEX(1:1,MAX(IF(COUNT(1:1),MAX(MATCH(MAX(1:1)+1,1:1,1))),IF(COUNTIF(1:1,"*"),MATCH("",1:1,-1)))) 宜しくお願い致します。

  • Excel2003での改列方法

    こんにちわ。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル列に代入 したいと思っているのですが、途中でセル列を変えたら データの続きから代入したいのですが上手くいきません。 この説明だと分かりづらいと思うので下記の例を見てください。 例) テキストファイルの中身: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,      :      ・ 90,91,92,93,94,95,96,97,98,99,100 セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、 Do Until EOF(intFF) Line Input #intFF, tmp buf = Split(tmp, ",") Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf) Loop Close #intFF 最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。

  • Excel2003での改列方法

    こんにちわ。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル列に代入 したいと思っているのですが、途中でセル列を変えたら データの続きから代入したいのですが上手くいきません。 この説明だと分かりづらいと思うので下記の例を見てください。 例) テキストファイルの中身: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,      :      ・ 90,91,92,93,94,95,96,97,98,99,100 セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、 Do Until EOF(intFF) Line Input #intFF, tmp buf = Split(tmp, ",") Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf) Loop Close #intFF 最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。

  • Excel2003での改列方法

    こんにちわ。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル列に代入 したいと思っているのですが、途中でセル列を変えたら データの続きから代入したいのですが上手くいきません。 この説明だと分かりづらいと思うので下記の例を見てください。 例) テキストファイルの中身: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,      :      ・ 90,91,92,93,94,95,96,97,98,99,100 セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、 Do Until EOF(intFF) Line Input #intFF, tmp buf = Split(tmp, ",") Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf) Loop Close #intFF 最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。

  • Excel2003での改列方法

    こんにちわ。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル列に代入 したいと思っているのですが、途中でセル列を変えたら データの続きから代入したいのですが上手くいきません。 この説明だと分かりづらいと思うので下記の例を見てください。 例) テキストファイルの中身: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,      :      ・ 90,91,92,93,94,95,96,97,98,99,100 セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、 Do Until EOF(intFF) Line Input #intFF, tmp buf = Split(tmp, ",") Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf) Loop Close #intFF 最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。

  • エクセル書式で、タイトル&ページ数を書き込む様な線がでます。

    タイトルの通りなのですが、職場のexcel書式で、印刷時だけ(プレビューでも) タイトルとページ数を書き込むための(ような)線が表示されてしまいます。 職場の前任の方が作った書式なのですが、今まわりに解る人がおらず困っています・・ 以前、ここで尋ねさせていただいたのですが、解決に至らなかったため再度質問させて下さい。 前回わかったことは・・ ・ヘッダー、フッターの設定ではない(ページ数も表示されていたが、これで解除されました) ・オートシェイプを使って線を引いているのでもない。 他に、どのような事が挙げられますでしょうか? みなさん、どうぞよろしくお願いいたします。

  • 高速化したいのですが、私には難問です。

    EXCELのシートにVBAから関数を記載させてます。 SELECTしてループの繰り返しのコードを高速化する良い方法がありましたらご教示願えれば幸いです。 前置きが長くなりますが 下記のコードを別途 GetRowsStepN 関数(指定間隔で範囲指定)を使っていくらか早くしました。(他にもっと良い方法があるかもしれませんが?例えば一括で範囲指定しそれぞれに一括で書き込む等。) 同じような流れで今回の課題のコード(すいません。ずっと下の方に記入してます)を早くしたいのですが、私には思いつきませんでした。 助けて下さい! GetRowsStepN( _ oRange_Target:=ActiveSheet.Range("D11:D" & SN * 2 + 10), _ iStart:=1, iRowCount1:=1, iRowCount2:=1).FormulaR1C1 = _ "=DATE(R6C15,R6C18,(ROW(R[-8]C[-3])-ROW(R1C1))/2)" 【GetRowsStepN 関数】←省略します 内容は N行おきの範囲を取得する関数です。(引数チェックなし) 'iStart : 開始行 'iRowCount1 : 選択行数 'iRowCount2 : 間隔行数 としてます。 前置きが長くてすみません。 【これが本題のコードです。】←ここからが早くしたいコードです。 k、BN、SNは変数(数字です) '**1段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(1<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-1)),"""")" Range("J" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next '**2段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(2<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-2)),"""")" Range("J" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next 以上ですが、上段と下段(奇数、偶数行)では、入力する関数が若干違うためFor j = 1 To SN * 2 Step 2でそれぞれ処理させてます。 私の悩みは変数 k の処理です。早く出来たコード(式が共通)と違い K の扱いは結局ループにせざるを得ないのでしょうか?(としてもどのような?) 例示では各段の各列は2列にしてますが、実際40列近くありますので(行の SN は30程度ありますから40×30×2のSELECT)、重いのです。(20秒位かかってしまいます) 理想は一括で範囲呼び込みして一括書き込み(配列処理?)ですが、式が列ごと、そのなかで偶数、奇数行ごとに違うので、列単位の呼び込みで処理するしかないのかな?だとしても k の扱いが?全くお手上げです。 読みにくいかもしれませんが、お知恵をお貸しください。 お願いします。

  • 高速化したいのですが、私には難問です。

    EXCELのシートにVBAから関数を記載させてます。 SELECTしてループの繰り返しのコードを高速化する良い方法がありましたらご教示願えれば幸いです。 前置きが長くなりますが 下記のコードを別途 GetRowsStepN 関数(指定間隔で範囲指定)を使っていくらか早くしました。(他にもっと良い方法があるかもしれませんが?例えば一括で範囲指定しそれぞれに一括で書き込む等。) 同じような流れで今回の課題のコード(すいません。ずっと下の方に記入してます)を早くしたいのですが、私には思いつきませんでした。 助けて下さい! GetRowsStepN( _ oRange_Target:=ActiveSheet.Range("D11:D" & SN * 2 + 10), _ iStart:=1, iRowCount1:=1, iRowCount2:=1).FormulaR1C1 = _ "=DATE(R6C15,R6C18,(ROW(R[-8]C[-3])-ROW(R1C1))/2)" 【GetRowsStepN 関数】←省略します 内容は N行おきの範囲を取得する関数です。(引数チェックなし) 'iStart : 開始行 'iRowCount1 : 選択行数 'iRowCount2 : 間隔行数 としてます。 前置きが長くてすみません。 【これが本題のコードです。】←ここからが早くしたいコードです。 k、BN、SNは変数(数字です) '**1段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(1<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-1)),"""")" Range("J" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next '**2段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(2<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-2)),"""")" Range("J" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next 以上ですが、上段と下段(奇数、偶数行)では、入力する関数が若干違うためFor j = 1 To SN * 2 Step 2でそれぞれ処理させてます。 私の悩みは変数 k の処理です。早く出来たコード(式が共通)と違い K の扱いは結局ループにせざるを得ないのでしょうか?(としてもどのような?) 例示では各段の各列は2列にしてますが、実際40列近くありますので(行の SN は30程度ありますから40×30×2のSELECT)、重いのです。(20秒位かかってしまいます) 理想は一括で範囲呼び込みして一括書き込み(配列処理?)ですが、式が列ごと、そのなかで偶数、奇数行ごとに違うので、列単位の呼び込みで処理するしかないのかな?だとしても k の扱いが?全くお手上げです。 読みにくいかもしれませんが、お知恵をお貸しください。 お願いします。

  • 高速化したいのですが、私には難問です。

    EXCELのシートにVBAから関数を記載させてます。 SELECTしてループの繰り返しのコードを高速化する良い方法がありましたらご教示願えれば幸いです。 前置きが長くなりますが 下記のコードを別途 GetRowsStepN 関数(指定間隔で範囲指定)を使っていくらか早くしました。(他にもっと良い方法があるかもしれませんが?例えば一括で範囲指定しそれぞれに一括で書き込む等。) 同じような流れで今回の課題のコード(すいません。ずっと下の方に記入してます)を早くしたいのですが、私には思いつきませんでした。 助けて下さい! GetRowsStepN( _ oRange_Target:=ActiveSheet.Range("D11:D" & SN * 2 + 10), _ iStart:=1, iRowCount1:=1, iRowCount2:=1).FormulaR1C1 = _ "=DATE(R6C15,R6C18,(ROW(R[-8]C[-3])-ROW(R1C1))/2)" 【GetRowsStepN 関数】←省略します 内容は N行おきの範囲を取得する関数です。(引数チェックなし) 'iStart : 開始行 'iRowCount1 : 選択行数 'iRowCount2 : 間隔行数 としてます。 前置きが長くてすみません。 【これが本題のコードです。】←ここからが早くしたいコードです。 k、BN、SNは変数(数字です) '**1段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(1<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-1)),"""")" Range("J" & j + 10).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next '**2段目** k = 0 For j = 1 To SN * 2 Step 2 k = k + 1 Range("H" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(2<=COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27),LARGE(INDEX(('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30=R5C27)*'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C9:R100C9,),IF(COUNTIF('[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C2:R100C30,R5C27)=1,1,3-2)),"""")" Range("J" & j + 11).Select ActiveCell.FormulaR1C1 = _ "=IF(ISERROR(VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0)),"""",VLOOKUP(RC2,'[営業所配置DATA" & BN & "月.xls]" & k & "'!R2C1:R100C30,11,0))" Next 以上ですが、上段と下段(奇数、偶数行)では、入力する関数が若干違うためFor j = 1 To SN * 2 Step 2でそれぞれ処理させてます。 私の悩みは変数 k の処理です。早く出来たコード(式が共通)と違い K の扱いは結局ループにせざるを得ないのでしょうか?(としてもどのような?) 例示では各段の各列は2列にしてますが、実際40列近くありますので(行の SN は30程度ありますから40×30×2のSELECT)、重いのです。(20秒位かかってしまいます) 理想は一括で範囲呼び込みして一括書き込み(配列処理?)ですが、式が列ごと、そのなかで偶数、奇数行ごとに違うので、列単位の呼び込みで処理するしかないのかな?だとしても k の扱いが?全くお手上げです。 読みにくいかもしれませんが、お知恵をお貸しください。 お願いします。

  • エクセルのマクロで上のセルの数式を相対参照でコピーしたい(フィルみたいに)

    エクセル2002で以下のようなシートがあります。  | A | B | C | D --------------------------- 1 |  1| 10| 100| =C1-1 --------------------------- 2 |    |    |    |  ここで、B2に文字が入力されると、A1とC1とD1をコピー、B2が消されるとA2とC2とD2を消去するマクロを書きました。 現在以下のように書いていますが、これでは入力位置がB2だろうがB3だろうかB20だろうが、D2と同じ数式になってしまいます。B5に入力されたならD5の数式はC5-1にしたいのですが、このような入力をするにはどうすればよいでしょうか。 ちなみにD列の数式は本当はもっと複雑です(この数式ならTarget.Offset(0, -4).Value = Int(Target.Offset(-1, -4).Value + 1でもたぶんいい・・・はず・・・) オートフィルを使えば!と思いましたが、Target・・・では使い方がわかりません。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Column <> 2 Then Exit Sub   //B列以外への文字入力はマクロ停止(のつもり) If Target.Value <> "" Then Target.Offset(0, -1).Value = Int(Target.Offset(-1, -1).Value + 1)   //A1に+1したものをコピー Target.Offset(0, 1).Value = Target.Offset(-1, 1).Value   //C2にC1をコピー Target.Offset(0, 2).Formula = Target.Offset(-1, 2).Formula  //D2にD1の数式をコピー◆ここが問題! Else Range(Target.Offset(0, -1), Target.Offset(0, 4)).ClearContents End If Application.EnableEvents = True End Sub

  • ListBoxの最大表示項目数について

    お世話になります。 vbaのフォーム上にListBoxを配置し、ColumnCountを13と定義しましたが、 ColumnHeadsをTrueにし、項目数を見てみると10項目しか表示されません。 実際に実行してみて、仮の値を設定してみても、10項目しか表示されません。 Webで検索してみましたが、「255文字の上限では」と似たような質問の回答を確認しましたが、 13項目の値を全て足しても200文字に届きません。 11項目以上は表示できないのでしょうか。 環境はExcel2000,2002で確認をいたしました。 原因をご存知の方、ご教授下さいますようよろしくお願いいたします。

  • エクセル セル(列)の幅

    エクセルでスケジュールを作成中ですが、ガントチャートっぽくしたく オートシェイプでバーを作成したいのですが、一つのセルの幅の寸法と オートシェイプの幅の寸法が合わない為、VBAで計算させようとすると うまくいきません。  オートシェイプのサイズの単位は"mm"でが、CELLの幅の単位はいったいなんでしょうか?  又、セルの幅の表示をmm単位にする方法はありますか?

  • 【Excel2007】条件付き書式の色だけコピーしたい

    条件付き書式のコピーに関しての質問です。 在庫の管理でエクセルを使っていて、基準在庫、現在在庫、そして比較の3つのシートが存在しています。 基準在庫を下回った商品をわかりやすく表示するため比較シートに(現在在庫-基準在庫)を計算させて、出た値が負だった場合の条件付き書式を設定しています。 ただ現在の方法だと、条件付き書式で表示が変わるのは"比較シート"だけなので、比較シートの条件付き書式で基準在庫を下回った品目は分かっても、現在在庫シートで基準在庫を下回った商品がどれだけあるか等が判断できないので困っています。 そこで"比較シート"の条件付き書式の書式(色やフォント)だけを別のシート(現在在庫シート)にコピーしたいのですが、方法はありますでしょうか? 通常のコピー&ペーストだと条件付き書式の"条件"のコピーとなってしまって困っています。詳しい方がいましたらよろしくお願いします。