my学備忘録

忘れっぽいエンジニア(一応)が勉強のために残す備忘録ブログ。技術系を中心にや読んだ本とか勉強になったことなど。

【Excel】複数条件のデータが存在するか確認したい【SUMPRODUCT編】

仕事でVBAを使う事になり、Excelについて勉強中…。

検索とかで、FindとかVLOOKUPとかMATCHとか見ててふと、

「複数の組み合わせを持つデータが存在するかどうかはどうやって確認するんだろう?」

と思ったので、少し調査。

ものすごく雑な例を出すとこんな感じ。

f:id:mamemamemaame:20171007222127p:plain

こんな感じで似たような組のデータがあります。

左側と右側で比較すると、同じ組み合わせはありますが、違う組み合わせもあります。

この時、「左右どちらも含まれる組み合わせはどれか?」という確認がしたい、

というのが今回の条件です。

で、色々調べましたが、SUMPRODUCT関数に行き着きました。

参考にしたページ

Excel(エクセル)基本講座:SUMPRODUCT関数の使い方

SUMPRODUCT関数は、

・配列に対応する要素間の席を計算し、その和を返す

・複数条件の件数をカウントしたり、合計数を出せる ←ここがポイント

上記を参考に記述してみました。

f:id:mamemamemaame:20171007223020p:plain

一行目の関数式を書くとこんな感じ

=SUMPRODUCT(($A$1:$A$10=D1)*($B$1:$B$10=E1))

(以降下のセルはオートフィルで埋める)

一つ目は左組のアルファベット列の中で、D1(右組一番上のアルファベット)と同一である。

二つ目は左組の数値列の中で、E1(右組一番上の数値)と同一である。

この2つの式の論理積を取るわけですから、

右側を支点にして、「左側のアルファベットと左側の数値の組み合わせが同じ数を表示する

ということになります。

出力結果としても、左側の組の中で、右側の組と同じ組み合わせなのは、

A-1(2つ)

B-1(1つ)

C-4(1つ)

E-5(2つ)

ということですね。

列が分かれた複数の組み合わせの中から、同じ組み合わせを抽出するときはSUMPRODUCT関数を使えば良さそうですね。

VBAも書いてるんですが、

VBAは性能を気にしながらコーディングしなきゃいけないらしいので、

コーディングするときは非効率なアルゴリズムは避けたほうがよさそうですね。

本買うならここら辺あたり買いたいなぁ。

【2017/10/24 追記】

同条件をCOUNTIFS関数を用いた場合どうなるか書きました。

mame-bibouroku.hatenablog.com

【python】pythonでsyslog出力

python勉強中…。

syslogを出力したくなったので調査。

https://docs.python.jp/2.7/library/syslog.html

えぇ…出力するだけなら

syslog.syslog('test syslog')

syslogをimportして上記メソッド書くだけ…。

これだけで良いらしい…。ほんとに?

実際にやってみる。

import syslog

syslog.syslog('syslog test')

出力結果

………
Oct  7 12:54:54 localhost test_syslog.py: syslog test

ほんとに出てる…。すごいな…こんなもんなのか?

Cで作った時はめんどくさかったような気がするけど…。

後はファシリティとかログとかもろもろをちゃんと指定する処理入れれば、普通にsyslog記述処理実装できるのか…。

時代は進んでいる…。

↓買いました。

【teraterm】teratermマクロでよく使うコマンドとSSHログイン

今回はteratermマクロでよく使うコマンドです。

sendln … 入力を行う(改行入り)

wait '文字列' … '文字列'が出力されるまで待つ

strconcat A B … AをBに文字列結合

connect A … Aに接続

基本こんだけで大丈夫でしょう。

えっ?これだけ?と思うかもしれませんが、意外といけます。

「あれ実行してこれ実行してこのファイル移動させてあのディレクトリで実行してあぁぁあめんどくさい!!」

となるときは、マクロ作成をおすすめします。

毎日このルーチンワークしなきゃいけなくて…という場合であればなおさらです。

また、Teratermでどこかのサーバにログインするときにも有用です。

サーバにログインするときのファイルはあらかじめ作っておいて保存しておきましょう。

たとえサーバが変わってもIPアドレスを変更して保存しておくだけで良いですからね。

大体同じなので、下記をどこかに保存しておくと良いと思います。

;; 接続先ホスト/ユーザ名/パスワード設定 
HOSTADDR = '127.0.0.1'
USERNAME = 'testuser' 
PASSWORD = 'testpassword' 

;; COMMANDの文字列を組み立て
COMMAND = HOSTADDR 
strconcat COMMAND ':22 /ssh /2 /auth=password /user=' 
strconcat COMMAND USERNAME 
strconcat COMMAND ' /password='
strconcat COMMAND PASSWORD

;; 接続

connect COMMAND

end

HOSTUADDR、USERNAME、PASSWORDは、環境に応じて書き換えましょう。

なお、通常SSH接続は22番ポートで接続するので、上記はそのままポート番号が書いてありますが、

環境によっては別のポート番号が指定されている可能性があります。

その場合は新しくPORT番号の変数を作成して、strconcatで文字列結合させましょう。

…
HOSTADDR = '127.0.0.1'
USERNAME = 'testuser' 
PASSWORD = 'testpassword' 
PORTNUM  = '22'

COMMAND = HOSTADDR 
strconcat COMMAND ':'
strconcat COMMAND PORTNUM
strconcat COMMAND ' /ssh /2 /auth=password /user=' 
strconcat COMMAND USERNAME 
…

teratermをよく使う方は、マクロも使えるようになっておくと、効率化が図れます。

上記コマンドを覚えておくだけでも、ルーチンワーク発生時にマクロ化することができると思います。

たった2日でわかるLinuxサーバーCentOS7.0対応

たった2日でわかるLinuxサーバーCentOS7.0対応

ショートカットキーまとめ(2017/10/1現在)

私は仕事の都合上、Linux系OS上で作業することが多いため、

よくviを使用します。

vimが入ってない時もあります。違いはまだ分かりません。

 

viで筆者がよく使うのコマンドモードのショートカットキーについて 思い出しながら記載。

 

コマンドモード

i…入力モード

v...ヴィジュアルモード(範囲指定とかに使う)

dd(dキーを2回)...一行削除(正確には切り取り?)

yy(yキーを2回)...一行コピー

p...次行に貼り付け

x...一文字削除(カーソル位置)

Shift + p ...カーソル位置から貼り付け

:%s/[対象文字列]/置換文字列/...置換コマンド

  最後にオプションを付与する事も出来る。

   g…全範囲対象    c…置換をするか毎回聞く

  :%s/\t/\n/gc # タブを改行に置換

Ctrl + f...ページダウンと同じ

Ctrl + b...ページアップと同じ

/... 検索

/検索 # 検索という文字列を検索

普段使いはこのくらい。 本当はvi上で出来ることはもっとあるはずなんですが、 あまり開拓していないのでこんな感じですね。

Linux系OSはサーバ上で動かすときCUIでしか動かせない!でもテキストファイルをいじりたい!という時はあると思います。 viは大体入っているのでマスターしておくと、どんな状態の機体が来てもやり過ごせます。

開発として使用しており、且つVimが使用できた場合、ctagsを導入しておくと、タグジャンプが実行でき楽です。

ctagsを使用しtagファイルを生成していたとき

Ctrl + ] カーソル位置にある関数の定義へジャンプ Ctrl + t ジャンプ元に戻る

折を見て買おうかな…↓

vi/Vim コマンドポケットリファレンス

vi/Vim コマンドポケットリファレンス

本ブログについて

本ブログは、忘れっぽいエンジニア(一応)の著者が、IT技術系を中心に、勉強になったことを備忘録として残しておくものです。

内容には偏りが恐らく発生しますが、特に気にせず更新していこうと思います。