Excel のシートの VeryHidden 設定

(使用している Excel は Excel 2016 です)

Excel の非表示シートにデータを格納して 他のシートから数式で参照する、なんてことはよくありますが その非表示のシートを簡単には表示されたくないときの方法です。

WRITE_0900_01

「ブックの保護」で、シート構成を変更不可にすることでも シートを再表示できなくすることはできます。

WRITE_0900_04

WRITE_0900_02

WRITE_0900_03

ただ、この場合は シートの追加やシート名の変更もできなくなってしまいます。

そこで、 Excel の VBA 側から シートの設定を変更します。

「コードの表示 (V)」をクリック。

WRITE_0900_09

VBA の画面が表示されます。

ここで、非表示になっているシート「Sheet2」の「プロパティ」の「Visible」属性を見てみます。

WRITE_0900_05

「Visible」属性には "0 - xlSheetHidden" が設定されています。 これが通常の Excel 側で設定した「非表示」状態です。

この「Visible」属性には 「表示」状態である "-1 - xlSheetVisible" 以外に "2 - xlSheetVeryHidden" という いかにも強そうな設定があります。

WRITE_0900_06

"2 - xlSheetVeryHidden" を設定してみます。

WRITE_0900_07

すると、Excel のシート側では再表示できなくなりました。

WRITE_0900_08

もちろん「通常の非表示」のシートが他にある場合は、 そのシートの再表示は可能です。

絶対に表示させない、というわけではないですが 他のシートの運用と分けることができますので便利です。

Excel のユーザー定義書式にある「G/標準」も書式

(使用している Excel は Excel 2016 です)

Excel のセルの書式設定の分類「ユーザー定義」は 初期値に「G/標準」と表示されます。

WRITE_0899_01

これも書式のようで、次のよう設定して、、、

G/標準年寝太郎

WRITE_0899_02

数字を入力してみます。

WRITE_0899_03

次のようになります。

WRITE_0899_04

「G/標準年寝太郎」の "G/標準" の部分が "3" で、"年寝太郎" の部分が文字列として連結されたようです。

文字列を入力した場合はそのままですね。

WRITE_0899_05

"G/標準" ではなく "標準" でも同じようで、 次のように設定すると、、、

標準デス

WRITE_0899_06

WRITE_0899_07

このようになります。

"G" も含めて「なんだろう?」と思っていましたが、 次のサイトに書いてありました。

[参考]
Excel(エクセル)の表示形式で見かける「G/標準」とは何の意味? | Prau(プラウ)Office学習所

"G/標準" というのは、Excel の初期状態の、 自動的に四捨五入や指数表示をしてくれる書式とのことです。

WRITE_0899_08

WRITE_0899_09

つまり、"G/標準年寝太郎" のように設定するのは 「Excel の初期状態の書式」に「文字列の"年寝太郎」を連結させる、という意味になるようです。

PostgreSQL で、一時的に全てのトリガーを無効にする

メモです。
(使用している PostgreSQL は PostgreSQL 9.3.12 です)

PostgreSQL で できるだけ他に影響を与えないように 一時的に全てのトリガーを無効にしたいと思っていたら 次のような方法がありました。

[参考]
PostgreSQLで一時的にtriggerを全て無効する方法 - Qiita

SET session_replication_role = replica;

クライアント接続の変数「session_replication_role」を変更する方法で この変数は、トリガおよびルールの発行を制御するそうです。

[参考]
18.11. クライアント接続デフォルト - PostgreSQL 9.3.2文書

実際に試してみます。

まず、table1 と table2 を作成。

CREATE TABLE table1 (
        field1  INTEGER
,       field2  INTEGER
);

CREATE TABLE table2 (
        field1  INTEGER
);

table1 の INSERT 時に field1 の値を field2 にセットする BEFORE トリガーを作成。

CREATE FUNCTION before_func1()
RETURNS TRIGGER AS $$
BEGIN
    NEW.field2 := NEW.field1;
    RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';

CREATE TRIGGER before_trigger1
    BEFORE INSERT ON table1
    FOR EACH ROW EXECUTE PROCEDURE before_func1();

table1 の INSERT 時に table2 にレコードを INSERT する AFTER トリガーを作成。

CREATE FUNCTION after_function1()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO table2 (field1) VALUES (NEW.field1);
    RETURN NULL;
END;
$$ LANGUAGE 'plpgsql';

CREATE TRIGGER after_trigger1
    AFTER INSERT ON table1
    FOR EACH ROW EXECUTE PROCEDURE after_function1();

テーブルとトリガーを作成したら、次の SQL を実行します。

INSERT INTO table1 (field1) VALUES (1);

table1 に INSERT 。

db=# INSERT INTO table1 (field1) VALUES (1);

INSERT 0 1

table1 を確認。

db=# SELECT * FROM table1;

 field1 | field2
--------+--------
      1 |      1
(1 row)

BEFORE トリガーで field2 に値がセットされています。

table2 を確認。

db=# SELECT * FROM table2;

 field1
--------
      1
(1 row)

AFTER トリガーで レコードが INSERT されています。

次にクライアント接続の変数「session_replication_role」を試しますが まず初期値を確認。

db=# SHOW session_replication_role;

 session_replication_role
--------------------------
 origin
(1 row)

初期値は「origin」でした。

クライアント接続の変数「session_replication_role」に 「replica」を設定します。

db=# SET session_replication_role = replica;

SET
db=# SHOW session_replication_role;

 session_replication_role
--------------------------
 replica
(1 row)

ちゃんと変更されてます。

さっきと同じ INSERT 文を実行。
(テーブルのレコードはクリア済です)

db=# INSERT INTO table1 (field1) VALUES (1);

INSERT 0 1

table1 を確認。

db=# SELECT * FROM table1;

 field1 | field2
--------+--------
      1 |
(1 row)

BEFORE トリガーが実行されなかったため field2 に値がセットされていません。

table2 を確認。

db=# SELECT * FROM table2;

 field1
--------
(0 rows)

AFTER トリガーが実行されなかったため レコードが INSERT されていません。

トリガーは実行されませんでした。
これは便利ですね。

もちろん他のセッションでは通常通りの動作をします。

ただし、整合性が保たれなくなる可能性があるので 当然ながら慎重に実行する必要があります。

Windows で システム エラー 1219 が消えないときの対処A

メモです。
(使用している Windows は Windows 10 です)

前に「システム エラー 1219 が消えないときの対処@」を書きましたが 今回は「システム エラー 1219」が発生したときに 「とりあえず、ここも見ておこう」という内容です。

まず NET USE をしますが 出てこないから困るわけです。

C:\> NET USE

新しい接続は記憶されません。

一覧にエントリが存在しません。

こういうときは 次の場所もチェックしてみます。

「コントロールパネル」から「ユーザアカウント」を選択。

WRITE_0897_02

「資格情報の管理」をクリック。

右側にある「Windows 認証情報」をクリック。

WRITE_0897_03

接続しようとしているサーバの情報が表示されたら そのせいで「システム エラー 1219」が出ている可能性があります。

削除して問題なければ「削除」をクリック。

この情報はサーバ接続時に「資格情報を記憶する」にチェック入れると 登録されます。

WRITE_0897_01

削除して問題なければ「削除」をクリック。

これで「システム エラー 1219」が消えることがあります。

差分ファイルだけを tar コマンドで固める

メモです。
(使っている Linux は Ubuntu 14.04.3 LTS です)

find コマンドで取得した更新日が新しいファイルだけを tar コマンドで 固める方法です。

更新日は、比較対象のファイルより新しいものを取得します。 (この方法については、前に書いているので、そちらを参照してください)

まずは環境変数の設定。
比較対象のファイル(BASE_FILE_PATH)と 固めるTARファイル(TAR_FILE_PATH)のパスを設定します。

$ BASE_FILE_PATH=./last_update.txt
$ TAR_FILE_PATH=/tmp/xxxxxx

既存のTARファイルが存在するとよろしくないため 念のためですが、0バイトで上書きしておきます。

$ cat /dev/null > ${TAR_FILE_PATH}.tar

find コマンドでファイルを取得しつつ tar コマンドで固めます。 このとき、tar コマンドでは 追記 "r" を指定するのと 圧縮の "z" は指定しないようにします。

$ find ./ -type f -newer ${BASE_FILE_PATH} -exec tar rf ${TAR_FILE_PATH}.tar {} \;

TAR ボールを作った後で圧縮します。

$ gzip -f ${TAR_FILE_PATH}.tar

最後に比較対象のファイルを touch コマンドで更新しておけば 次もこの後からの差分を取得することができます。

$ touch ${BASE_FILE_PATH}

Windows 上で .htaccess のようなファイルを作成する

(使用している Windows は Windows 10 です)

Windows 上で普通に .htaccess のような「 . (ドット)」 から始まるファイルを作成しようとすると 拡張子のみと判断されて 次のようにエラーが出てしまいます。

WRITE_0894_01

最近知ったのですが、そういうときは 次のようにファイル名の最後にも「 . 」を入れます。

WRITE_0894_02

そうすると 最後の「 . 」は消えて .htaccess になります。

WRITE_0894_03

これはフォルダなどでも同じです。

この方法だと コマンドプロンプトや他の方法を使わなくても 簡単に「 . 」から始まるファイルを作ることができます。

Windows で システム エラー 1219 が消えないときの対処@

メモです。
(使用している Windows は Windows 10 です)

次のようにネットワークドライブの割り当てをしようとしたときに 「システム エラー 1219」が発生することがあります。

C:\> NET USE P: \\fileserver ...
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。
サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。

たいていは NET USE ... /DELETE で解決しますが たまにエラーが消えないときがあります。

NET USE で見ても一覧に表示されず。

C:\> NET USE

新しい接続は記憶されません。

一覧にエントリが存在しません。

こんなとき、とりあえずの対処法として 次のようにサーバ名をIPアドレス(または逆にIPアドレスからサーバ名)に変更して コマンドを実行します。

C:\> NET USE P: \\192.168.1.200 ...

サーバ名が設定されていない場合は 自分のパソコンの lmhosts などに記載すると良いです。

find コマンドで日時を指定して検出する

メモです。
(使っている Linux は Ubuntu 14.04.3 LTS です)

find コマンドで -mtime オプションを使うと ファイルの更新日を条件にして「〜日前」のような検出ができます。

$ find ./ -mtime -3

具体的に日時を指定して検出するには 次のように -newermt オプションを使用します。 (-newermt の m は Modify の m で、a にすると Access、c だと Change になります)

$ find ./ -newermt "2018/10/30 12:00"

(日付の書式は色々指定できます)

これで指定した時刻よりもタイムスタンプが大きい(指定した時刻は含まれない)ファイルを検出することができます。

-newerXY reference

    Compares the timestamp of the current file with reference.  The reference argument is normally the name
    of a file (and one of its timestamps is used for the comparison) but it may also be a string describing
    an absolute time.  X and Y are placeholders for other letters, and  these  letters  select  which  time
    belonging to how reference is used for the comparison.

    a   The access time of the file reference
    B   The birth time of the file reference
    c   The inode status change time of reference
    m   The modification time of the file reference
    t   reference is interpreted directly as a time

    Some  combinations  are  invalid;  for example, it is invalid for X to be t.  Some combinations are not
    implemented on all systems; for example B is not supported on all systems.  If  an  invalid  or  unsup‐
    ported  combination  of XY is specified, a fatal error results.  Time specifications are interpreted as
    for the argument to the -d option of GNU date.  If you try to use the birth time of a  reference  file,
    and  the  birth  time cannot be determined, a fatal error message results.  If you specify a test which
    refers to the birth time of files being examined, this test will fail for any  files  where  the  birth
    time is unknown.

Google サイト内検索

Amazonアソシエイト