ラベル Excel の投稿を表示しています。 すべての投稿を表示
ラベル Excel の投稿を表示しています。 すべての投稿を表示

2015年10月13日

更新日付を自動で入れるマクロ - EXCEL

例えば、B列に以下テスト画面のようにa,b,c,dと入れたら、自動で「日付」と先頭に書かれた列に更新日付を入れたい。


コードは下記。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row <> 1 Then '①
 Dim ret As Variant
 Set myApp = New Excel.Application
 ret = myApp.WorksheetFunction.Match("日付", Range("1:1"), 0) '②
 If Target.Column <> ret Then '③
 Cells(Target.Row, ret) = Date
 End If
End If
End Sub

① 先頭行の更新は無視
② 先頭行で”日付”を探し位置(列数)を返す
③ 先頭行に”日付”が見つかった列の更新は無視

以上

2015年10月11日

横一列選択範囲の一番右の値を返す式 - EXCEL

横一列の範囲で一番右の値を返す式を見つけたので記しておく。

適用したい範囲がB1:Z1なら以下のように式を作る。
※元ネタに少しだけ工夫を入れ、エラーとなった場合、値0を返すようしている
=IFERROR(INDEX(B1:Z1,COUNT(B1:Z1)),0)

以下は、B1:Z1の範囲で一番右の値を返す式をA1に入れた実際の画面例。


以上

2015年10月10日

[EXCEL]インデックスが有効範囲にありません。

Workbooks.Open ("slave.xlsx")
Set ret = Sheets("slave1").Range("A1")

上記の様なVBAコードを実行すると、「実行時エラー ‘9’: インデックスが有効範囲にありません。」とエラーが出る。ファイル名もシート名も何も間違っていないのにエラーが出る。


以下の様に書き換えたら、エラーが出なくなった。
et mybook = Workbooks.Open("slave.xlsx")
Set ret = mybook.Sheets("slave1").Range("A1")

Sheetsは前に何も付けない場合は、アクティブなワークブックを対象に処理をする様だ。その際、アクティブなワークブックに”slave1″というシートがないとエラーになるようだ。

対処方法としては、例のように明に対象のワークブックを指定してあげること。

「実行時エラー ‘9’: インデックスが有効範囲にありません。」は出なくなる。

以上

2014年1月21日

Excelで行列計算

(1,0,1,1) と (1,2,3,4)の内積をExcelで計算するには、以下のようにする。


(1,0,1,1)をA2:D2に入力、(1,2,3,4)をA3:D3に入力し、E3セルで{=SUM(A2:D2*A3:D3)}と入力すると計算できる。

ここで大括弧は、キーボードから文字として入力することはできず、E3セルに=SUM(A2:D2*A3:D3)と入力してから、[Ctrl]+[Shift]+[Enter]とすると大括弧で囲まれる。

以上

2013年12月23日

Excel6つの合計方法

仕事でExcelを使うことが増えてきた。ちょこっとしたテクニックをメモしてみる。

1.誰でも知っている基本の合計方法



セルB1からB10までの合計値を求めるには以下。
=SUM(B1:B10)

2012年8月18日

[EXCEL]VLOOKUP関数の高速化

EXCELのVLOOKUP関数は便利だが非常に遅い。改善方法を調べてみたので記す。

Ⅰ.VLOOKUP関数の遅さを体験

1) Excelのオプションの計算方法の設定を[手動]に変え、[ブックの保存前に再計算を行う]のチェックを外す。


2) 下記の10万行をVLOOKUPで埋め尽くしたSheet1及び参照先のSheet2からなるBookを作成。

→ 実際に使用したBookはこちら。※こちらをクリックするとダウンロード

Sheet1 ※参照元 ※4~99990行は非表示

Sheet2 ※参照先 ※4~99990行目は非表示


3) 再計算をクリックし、遅さを体験

→ Core2Duo L7100 1.2GHz環境では完了まで約18分かかった。

Ⅱ.改善

1) Sheet1を以下のように変更

→ 実際の改善版はこちら。※こちらをクリックするとダウンロード

→ 参照先がソートされてることが条件で、VLOOKUPと同じ動きをIF、INDEX、MATCHを使って再現。



2) 再計算をクリックし、速さを体験

→ 同環境で完了まで3秒以下。実に、360倍以上。

参考

  • エクセルでVLOOKUP関数を使用すると、データ数が多くてフリーズしてしまいます。(Office系ソフトのQ&A)
    http://okwave.jp/qa/q4733179.html