3児のパパそしてエンジニア

33歳3児のパパの家の事やエンジニアとしての事をつらつらと書きます

Excelが遅いです。重たいです。調子悪いです。

先日、私のところに電話が。

Excelが開くのも動きも遅くて調子悪いんやけど、どないしたらいい?」

と。動いてないことはないが、電話での感じはとてもストレスを感じてそう。。

 

 

どないしたらいい?ってなんやねんおもたけど。

忙しい部署やし困ってんねやろな。

 

 

[ファイルはどこにありますか。]

(サーバーです。)

[そのファイルはローカルに保存しても良いものですか]

(大丈夫です。)

[コピーしてみてください]

(できました)

[コピーは遅かったですか]

(普通ですね)

 

[そうですか。そのファイルは私も触っていいですか?]

(大丈夫ですよ)

[少し時間ください。]

 

 

ってな感じで進みまして。

これは話聞くより触ったほうがはやそうなので直接見てみる。

 

まぁサーバーにあるファイルを見てみますか。

え!?15MB?でかすぎやん?? 

唯単にでかすぎで重たいんじゃない??

 

考えても仕方ないので開きます。確かに遅い。

んー。なんでしょう。

シートは1つ、セルは多く見ても8000個ぐらいしか入力していない。

 

 

頭にピコーン!!ときて

Ctrl+Endを押してみる。入力されていない行列まで指定されるので

ごみデータでも残っているんでしょう。

エイ!ヤーで削除。

1.9MBまで落ちました!!

それでもでかいし、まだ重たい。。。

 

 

アドインも特にないし。リンクも貼ってないし。

なにした?見えへん障害物置いたな。

 

 

見えないデータか?セルは消したぞ。ってことは

図形か?テキストボックスか??正解きたやろこれ。ってことで

 

F5→セル選択→オブジェクト→OK

オブジェクトを探します。

 

。。

。。。

。。。。

。。。。。。。。。。。。。

 

ん?何もない??

いやオブジェクト選択が終わってない。

数分待つと。

デデーーーーーーーーン!!

 

「未入力のテキストボックス108853個」

 

どんな数やねん。なんでこんなんなるん?

そして自分で操作して削除するのに、重たすぎて動かせない。

消せない。

 

 

あかん時間の無駄。ほかの作業もしたい。

マクロだ。

 

コチョコチョっと。

これ↓実行して放置

 

Sub テキストボックス削除()

    Application.ScreenUpdating = False
  Dim i As Long

  With ActiveSheet.Shapes
    For i = .Count To 1 Step -1

      If .Item(i).Type = msoTextBox Then
        .Item(i).Delete
      End If

    Next i
  End With
    Application.ScreenUpdating = True
    MsgBox ("終了しました。")

End Sub

 

 

マクロ実行完了まで約30分。

 

軽くなりましたよー。どうぞ使ってくださいな。

ってことで一件落着。

「ありがとうございます。どうやったんですか?」

と聞かれましたが。

説明めんどくさいし、同じ事象が起きることはたぶん当分ないので

「ごみデータが大量にありました。時々エクセルでなるんすよ。ははは。」

で終わり。

 

 

原因がわからんけど。ま、解決したから良いでしょう。

 

 

 

値だけコピーして、新しいファイル作った方が早かったかな??

また暇なときやってみよ。

オブジェクト10万個も貼る作業が無理かな?

 

 

VBA 解決 羅列 20181108更新

1・Dim honyarara As InternetExplorer でユーザ定義型は定義されていません。

 というエラーがでてしまう。

 

1-対策

 「ツール」「参照設定」の参照可能なライブラリ ファイルより、

 Microsoft Internet Controls

 にチェックを入れる。

 

 

2・Dim honyarara As HTMLDocument でユーザ定義型は定義されていません。

 というエラーがでてしまう。

 

2-対策

 「ツール」「参照設定」の参照可能なライブラリ ファイルより、

 Microsoft HTML Object Library

 にチェックを入れる。

 

 

 

この記事の内容はどんどん増えます。

 

java 少数計算

別に何てことない内容ですが。

 

 

一応

忘れる前に書いておきます。

 

 

 

 

ある時↓

少数の計算か。何が良いんやろ?

調べるのめんどくさ!

教えてー!!

 

 

適当に聞いてみた。

・double

・float

・long

・一旦sql使って

とかって色々言われました。

 

 

ダブルね      ふむふむ、でもなぁ。

フロートか  ほぉほぉ、でもなぁ。

ロング?は?おまはんに聞いたのが間違いでした。寝とけ。

一旦sqlか。んー、ただの計算にコネクションとるのもなぁ。。それってセンスなくなくない?

 

 

 

 

 

もうええわ、

Googleせんせーい!

 

 

 

 

はーい

 

 

 

 

びっぐでしまるーーー。

 

 

 

 

 

 

解決しました。さすが!

BigDecimalを使えばいいんやって!!

 

 

 

 

で、計算の仕方ですが

+ 、-、*、/ 等は使用しないで!

 

 


足し算が      add()
引き算が      subtract()
掛け算が      multiply()
割り算が      divide()

を使えば良いらしい!!

 

 

こんな感じ!

 

BigDecimal a = new BigDecimal("2.0");

BigDecimal b = new BigDecimal("2.0");

BigDecimal c = new BigDecimal("3.0");

//足し算(2.0 + 2.0)

double val1 = a.add(b).doubleValue();

//引き算

(2.0 - 2.0) double val2 = a.subtract(b).doubleValue();

//掛け算(2.0 × 3.0)

double val3 = b.multiply(c).doubleValue();

//割り算(2.0 ÷ 3.0 を小数第3位で切上げ)

double val4 = a.divide(c, 3, BigDecimal.ROUND_HALF_UP).doubleValue();

 

 

初めの宣言の部分なんやけど 

引数にString型を使ってるのが大事!!

まじで!!

これじゃないと正確な値になりません!!

 

 

ディバイドの引数は調べてくださいな(>_<)

 

 

BigDecimal

返り値の型を指定して返せるねんて!

便利ー!!

 

int             intValue()
long         longValue()
float         floatValue()
double     doubleValue()

 

 

 

これで少数の計算はオッケイ!!

 

 

追記

 

計算した値を

そのまま表示するだけならば

.toString

で見たままを出すのが良さそうでした。

少数第◯位までを表示にするのであれば

.scale

第一引数に 第◯位までの◯を。

第二引数に 四捨五入などの丸め処理方法を記述で完了です。   

 

 

ちなみにBigDecimal

Java9からは非推奨だとか。。。

 

 

 

FATAL ERROR in native method: なんちゃらかんちゃら AGENT_ERROR_TRANSPORT_INIT(197)

あるときのプログラム開発中です。

 

 

よし、ここらへんで終わり!続きは明日~♪

 

 

ー翌日―

 

 

今日はゴリゴリやってまおー!!

昨日はどこまでやったっけ??

 

tomcat起動!!ON!!!!!

 

 

・・・

 

・・・・・

 

・・・・・・・

 

・・・・・・・・・

 

・・・・・・・・・・・

 

・・・・・・・・・・・・・

 

Eclipseのコンソールに何もでない。

 

Eclipseのペーン的には動こうとしているけど。。。。。

 

 

なんやこれ(+o+)

幸先わっる。。。。もう今日あかんわ。と、うなだれていると。

 

 

 

 

 

FATAL ERROR in native method: JDWP No transports initiallized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

 

 

 

って出てきました。

(?へ?)

 

ようわからへんけど

取り敢えずリフレッシュしてクリーンしたら直るやろ!

 

 

FATAL ERROR in native method: JDWP No transports initiallized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

あかん。

 

 

 

 

Eclipseが悪いんか??取り敢えず再起動

からの一応プロジェクトリフレッシュ&クリーン

tomcat起動!!!

 

 

 

FATAL ERROR in native method: JDWP No transports initiallized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

 

直らんやん。

 

 

もうあかんわ解決しても今日はやる気なくなった。

 

 

 

で。切り替えていろいろ調べると

LANを2つ繋いでるのがダメやったりうんたらかんたら。。。

 

 

コマンド

start .\eclipse.exe -clean %*

が記述してある eclipse.exe -clean.cmd

が解決してくれました。

 

 

 

これをeclipse.exeがある同じフォルダにおいて実行!!

 

 

tomcat起動!!

動いたーーー!!○(^▽^)○やったね

 

 

 

でもやる気はないので今日の仕事は終わり。

何か調べものか勉強して帰ろっと。

ネットワークについて(基礎編)

ネットワークについての備忘録です。

 

この記事を書こうと思ったきっかけは

 

ある日突然ネットに繋がらなくなり

いろいろ見た結果

PCのIPが勝手に変わっていた事が原因だった。という現象に会いました。

 

 

そもそもIPって?

グローバルIP?ローカルIP?

DHCPっていまいちわかんね。

っていう頭だったので調べました。というのが背景です。

 

 

では。

(この話は自宅前提かな。たぶん)

 

 

IP

 よく言うのは住所。

 まあそのままですね。

 

 127.0.0.0/8  これはループバック

 これに Ping を打つと、自分あてになる。

 ただ、パケットは送出しないらしい。

 

グローバルIP

 登録業務受付団体に申請して割り当てられる。

 その中にも動的IP固定IPがある。

 グローバルIPは、ほぼほぼルータに振られるだろう。

 固定IPの使用用途はVPNやWEBカメラ、自サーバーにWOLなどなど

 外から繋ぐのにIP変わられちゃ困るやつ。

 

 疑似固定IPってのもある。

 DDNS

 URLやドメイン名を登録して、動的IPと結びつけるらしい。

 

ローカルIP(プライベートIP)

 ルーター以下、のPC達につくIP。

 192.168.A.Bみたいな感じ。

 Aの部分はルーターのメーカーによるっぽい。

 Bの部分はルーターが割り当てる。(通常ルーターが1なので2以降かな)

 

ipconfig で参照

   IPv4がそのPCのプライベートアドレス

 デフォルトゲートウェイルーターのプライベートアドレス

 ルーターのプライベートアドレスはそうそう変わらないが

 PCのプライベートアドレスは再起動等で変わることがある。

             ↓これ

          DHCPサーバーの機能

 

ping www.yahoo.co.jp

などと、実行してみると、IPが表示されます。

182.22.31.252  とか。

このIPアドレスをIEで開いてみると、Yahooのページにいく!

 

ふむ、グローバルIPが住所ってことですね。

公開サーバーだからIPでつなぐことが出来るらしい。。

このへんいまいち。。

 

URLは?

IPだと数字の羅列でわかりにくいから、URL+ドメイン

分かりやすく識別しているらしい。

 

yahoo.co.jpの部分がドメイン

 

ドメインとグローバルIPはどこかしらで、関連付けされているってことですね。

 

 

それをしているのが、DNSサーバー です。

DNSサーバーにURLを言って

DNSサーバーからIPアドレスを教えてもらう。

そしてそのIPの場所を見に行く。

これがネット参照の流れ。(名前解決:正引き)

 

基本DNSサーバーはプロバイダが持っている。

さらにその上の、大元のルートサーバーと呼ばれるDNSサーバーも

あるらしい。世界に13個あり、13の組織が持っているとか。

 

 

APIPA

 DHCPの変わりみたいな機能です。

 しかしAPIPAによって割り当てられるIPは

 IP    169.254.XXX.XXX

 サブネット 255.255.0.0

 デフォゲ  なし

 と、小規模の閉じたネットワーク推奨の

 リンクローカルアドレスです。

 

そう!!このリンクローカルアドレスに変わってしまったのでネットに繋げなかった。

なんやこれ。

 

 

ネットワークの共有センターから接続を有効にするとか

ipconfig/release ipconfig/renew とか

TCP/IPのリセット、再インストールとか

いろいろと試してたり、いろんな方法がネットにもごろごろしてますが

私の場合は、PCの電源を落とし、ACアダプタも外して

少し待って、起動すると治りました。

 

 

突き詰めていけば原因もわかるのかもしれませんが

そこまでの力は私にはありませんでした。

 

いやー勉強した気がします!!

これは疲れた。

Java tomcat エラー error reading tld listeners java.io.eofexception

Error reading tld listeners java.io.EOFException
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2228)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2694)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:761)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
at org.apache.catalina.startup.TldConfig.processCache(TldConfig.java:388)
at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:289)
at org.apache.catalina.core.StandardContext.processTlds(StandardContext.java:4307)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4144)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

 

作成した画面はまぁ動くが

tomcat実行時にこのようなエラーが出て気持ち悪い。

 

なんやねんこれ。。。。(T^T)

 

 

色々調査をしていったところ

tomcat/workフォルダ以下にある tldCache.ser が悪いとかなんとか。。。。

面倒なのでworkフォルダごと削除し

 

ビルドし直すとエラーは消えました。

 

 

 

解決方法はわかりましたが原因はよくわかりません。

 

Win7 XPMODE MACアドレス重複


Windows7のXPモードについて

 

ネットワークのMACアドレスはインストール時に自動採番されます。

XPMODEのシステムをコピーした場合、コピー先のシステムでMACアドレスを再取得する必要があります。

 

あるパソコンでシステムバックアップ取得し、別パソコンへシステムリストアする時には下記操作が必要になります。

 

 

<手順>

1.XPMODEの設定を開き、ネットワーク アダプターの数とアダプターを記録する。

2.ネットワーク アダプターの数 -> 0 にしてOKをクリックする。

3.記録しておいたネットワーク アダプターの数、アダプターにしてOKをクリックする。

4.XPMODEを起動しMACアドレスが他のシステムと重複していないことを確認してください。

 


<注意事項>

MACアドレスを変更しなかった場合は通信ができない現象になります。

Oracle UTL_FILE 使いたい

11gの場合

 

C:\oracle\product\11.2.0\dbhome_1\database\initsid.ora

の中に

 

UTL_FILE_DIR=*

 

を追記する。

UTL_FILE_DIR='C:\'
上記の様に追記すると、C直下のみ有効となる
※C以下ではない。

 

initsid.ora init.ora
でまよう。。。。。。

 

たぶん、pfileかspfileのどちらを使用しているか確認すればわかる。

 

若しくわ
両ファイルに異なる設定をし、オラクルを起動したうえで
SELECT NAME, VALUE FROM V$PARAMETER2 WHERE NAME = 'utl_file_dir'
を実行すれば
NAME   VALUE
ult_file_dir  C:\
などとでるので、確認可能です。

 

 

ご存知の方いらっしゃれば、教えてください。 

Oracle DB削除

Oracle 10g から データベースファイルを削除する DDL が追加された。


データベースファイル、サーバーパラメータファイルが削除することができる。


実行の前提条件として DROP DATABASE を行なうには RESTRICT モードでかつ排他モードで MOUNT 状態であること

 

以下、コマンドの流れ

 

SQLPLUS /NOLOG


CONN SYS/MANAGER AS SYSDBA


STARTUP RESTRICT MOUNT


DROP DATABASE ;

 

これだけです。

M10サーバー 起動

XSCFは通電して準備出来次第、使用可能になります。
XSCFのランプが点灯したらOK。

 

 

以下↓端末(いつもはFUJITSUノート)からTeraTermで接続する。

 

Login:USER

 

Password:PASS

 

 

XSCF>

のプロンプトになるはずです。
ここで

 

poweron -p 0

 

をすると、M10の電源が入ります。
(※poweron -p 0 は電源ボタンを長押しするのと同じです。)

 

これでOSまで上がってきます。

そのままOSコンソールに入るには

 

console -p 0

 

XSCFにもどるには
#.

 

で戻ります。


※電源ボタンで起動するには
※切替スイッチをロックモードにしておかないといけません。
※サービスモードは電源スイッチは効かないです。

AIX IP変更

AIXでのIPアドレス変更は

 

rootユーザーで

 

smitty起動

 

通信アプリケーションとサービス

 

TCP/IP

 

最小構成と始動

 

変更したいインターフェースを選択

の順に進む。

 

IPアドレスを設定し

Enterで

コマンド:OKの画面が表示されたら

 

 

変更完了。

 

 

 

2重化されてる場合は実態の

IPアドレスを変更する。

 

どれが実態か確認したい時は

 

smitty

 

バイス

 

通信

 

リンク集約

 

すべてのリスト

で確認できます。

 

 

 

 

 

JAVA Unsupported major.minor version 51.0

備忘録

 

Eclipseをworkspaceそのままで使いまわしたり、

流用できるから移植して開発をしていると、

JAVAのプログラムを実行すると時々こういうエラーが出る。

 

試行錯誤の結果。

 

使用しているjavaのバージョンがダメ。

若しくわ、Eclipseの設定がダメ。

っぽいです。

 

バージョン表はこんな感じらしい。

J2SE 8 = 52  J2SE 7 = 51 J2SE 6.0 = 50
J2SE 5.0 = 49 JDK 1.4 = 48

 

JDK JREを合わせるか

Eclipseの設定を合わせるかで解決しました。

 

 

 

 

『FTPの仕組み』

 

20番ポート データコネクション

21番ポート 制御コネクション

を使う。


20番ポートは

データのやり取り。

21番ポートは

ftpサーバとやり取り

をする際の開始終了を制御するために使用。

通常クライアントからサーバの21番ポートに依頼する。

 

【アクティブモード】

サーバー側からデータ接続要求を行う

                 

【パッシブモード】

クライアント側からデータ接続要求を行う

                   


一般的にはパッシブモードが使われている。

アクティブモードはファイアーウォール云々で、クライアント側で受信する場合はきついらしい。

クライアント側から送信する場合は緩いから、パッシブモードを使う。

 

【anonymousFTP】

不特定多数にむけてソフトウェア配布を行う為等に開発されたもの。

通常はサーバー側から、IDとパスワードを求められるが

anonymousで提供されれいるファイルをダウンロードするためにそういったものを

意識することなく利用する事ができます。

意識することがないと言っても、パスワードが必要ないという事ではなく

ユーザー名を「ftp」「anonymous」ということにして、パスワードをメールアドレスにしているのが一般。

 

 

Excel 重複項目は1として集計

なん行あるか。

これを集計するときはCOUNTA等だしますが、

重複項目はいくつあっても1としたい、

 いちご

 いちご

 れもん

 めろん

 いちご

 めろん

↑これを3という結果にしたい時どうすれば良いか。

 

 

こうすれば良い!

 


=SUMPRODUCT(1/COUNTIF(範囲,範囲))


しかし!!(>_<)

上記だと空白セルを含む範囲を指定すると

#DIV/0!になる

空白セルを0として計算してしまうからだと思う。たぶん。

 

じゃあ
空白を1件として考える!そして1を引けば良い。

 

これだ↓↓

=SUMPRODUCT(1/COUNTIF(範囲,範囲&””))-1

よし!これでok!!

 

AIX パスワード変更

やっぱりユーザーのパスワードを変更したい!!って時。


ユーザーのパスワード変更コマンドは

chpasswd

passwd

の2つです。


chpasswdはrootユーザーのみで実行可能。


使用方法↓

#chpasswd

user:passwd1

auser:passwd2

CTRL+dで終了

 

passwdコマンド

使用方法

passwd

"ログインしているユーザー"の旧のパスワード:old_pass

"ログインしているユーザー"の新のパスワード:new_pass

もう一度、新パスワードを入力してください:new_pass

 

という流れでパスワード変更はできる。