2020年2月18日火曜日
IE,Edgeで日本語ファイル名をダウンロードすると文字化けしてしまう対策
header('Content-Disposition: attachment; filename*=UTF-8\'\''.rawurlencode($filename));
2019年10月4日金曜日
シート保護掛けたが、パスワードを忘れてしまいました?ハッキング方法
下記のソースコードを解除したいシートにコピーして、実行するだけ…
Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n As Integer Dim i1 As Integer, i2 As Integer, i3 As Integer Dim i4 As Integer, i5 As Integer, i6 As Integer On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _ Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) If ActiveSheet.ProtectContents = False Then MsgBox "One usable password is " & Chr(i) & Chr(j) & _ Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) Exit Sub End If Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next: Next End Subここ参照
2019年10月1日火曜日
javascriptで月末日を求める
ラベル:
date,
javascript
12+1=13になるけど、そこも問題ないみたい、0が1月らしい
var n = new Date('2019-12-01')
var m = new Date(n.getFullYear(),n.getMonth()+1,0);
console.log(m);
> Tue Dec 31 2019 00:00:00 GMT+0900 (日本標準時)
2019年7月10日水曜日
sql DATE_ADD
select DATE_ADD('2019-01-31', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-30', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-29', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-28', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-27', INTERVAL + 1 MONTH);
2019-02-27
2019-02-28
select DATE_ADD('2019-01-30', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-29', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-28', INTERVAL + 1 MONTH);
2019-02-28
select DATE_ADD('2019-01-27', INTERVAL + 1 MONTH);
2019-02-27
2019年7月2日火曜日
左に列の合計,FormulaLocalの書き方
ラベル:
formual,
FormulaLocal,
vba
cl.Offset(0, 3).FormulaLocal = "=SUM(RC[-2],RC[-1])"
2019年7月1日月曜日
vlookupではできない、範囲指定のカスタマイズ関数
Function vlookups(val As Range, min As Range, max As Range, col As Range) As String
Dim cl As Range
For Each cl In min
If val.Value >= cl.Value And val.Value <= cl.Worksheet.Cells(cl.Row, max.Column) Then
vlookups = cl.Worksheet.Cells(cl.Row, col.Column)
Exit For
End If
Next
End Function
使い方:
=vlookups(E4,$A$1:$A$4,$B$1:$B$4,$C$1:$C$4)
結果:
2019年5月24日金曜日
G Suiteのバグ?仕様?
G Suiteのバグ?仕様?
Steps:
1.グループメールabc@xxx.comを作成
2.xyz@xxx.comの個人メールのGmail設定から、「アカウント追加」して、abc@xxx.comから送信できるように登録
3.グループメールabc@xxx.comを削除
4.アカウントabc@xxx.comを作成します
結果:
xyz@xxx.comがabc@xxx.comのパスワードを知らなくでも、abc@xxx.comが送信者として送信できる。
但しabc@xxx.comアカウントの送信済みには残りません。
abc@xxx.comの受信もxyz@xxx.comの受信されません。
ややこしいけど、これは仕様ですかバグですか?
Steps:
1.グループメールabc@xxx.comを作成
2.xyz@xxx.comの個人メールのGmail設定から、「アカウント追加」して、abc@xxx.comから送信できるように登録
3.グループメールabc@xxx.comを削除
4.アカウントabc@xxx.comを作成します
結果:
xyz@xxx.comがabc@xxx.comのパスワードを知らなくでも、abc@xxx.comが送信者として送信できる。
但しabc@xxx.comアカウントの送信済みには残りません。
abc@xxx.comの受信もxyz@xxx.comの受信されません。
ややこしいけど、これは仕様ですかバグですか?
2019年5月10日金曜日
令和数式を置換してくれる自作関数
ポイントは正規表現のReplaceで、パターン化して一致されたセルの番地を更にReplaceに使ったこと。「$1」を使って一個目のマッチングを引用すること。
Option Explicit
Public Const REIWA = "IF(_CELL_>=DATE(2019,5,1),""令和""&IF(YEAR(_CELL_)-2018=1,""元"",YEAR(_CELL_)-2018)&""年""&MONTH(_CELL_)&""月""&DAY(_CELL_)&""日"",TEXT(_CELL_,""ggge年m月d日""))"
Function reiwa_switch(strFormual, strCellAddr As String) As String
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = "TEXT\((" & strCellAddr & "),""ggge年m月d日""\)"
.IgnoreCase = False
.Global = True
End With
reiwa_switch = reg.Replace(strFormual, Replace(REIWA, "_CELL_", "$1"))
End Function
=reiwa_switch(A1,A2)→関数
TEXT(data!FU3,"ggge年m月d日")→第一引数(A1)
data!FU3→第二引数(A2)
IF(data!FU3>=DATE(2019,5,1),"令和"&IF(YEAR(data!FU3)-2018=1,"元",YEAR(data!FU3)-2018)&"年"&MONTH(data!FU3)&"月"&DAY(data!FU3)&"日",TEXT(data!FU3,"ggge年m月d日"))→結果
2019年4月3日水曜日
【新年号】令和元年、エクセル数式での対応方法
=IF(D1>=DATE(2019,5,1),"令和"&IF(YEAR(D1)-2018=1,"元",YEAR(D1)-2018)&"年"&MONTH(D1)&"月"&DAY(D1)&"日",TEXT(D1,"ggge年m月d日"))
※数式の中の「D1」は実際日付が書いてあるセルです、そこは適当に変更してください。
※「令和元年」ではなく「令和1年」として表示したければ、「IF(YEAR(D1)-2018=1,"元",」を削除し、「-2018)&"年"」の中の「)」も削除すればOK
2019年3月29日金曜日
PHPでCSVを読み込んで、Arrayに変換するメソッド、最初の行を横方向連想配列のキーとするや、縦方向のid列を指定するや、一部の列のみ抽出するとか、機能盛りだくさん
/* $csvPath: CSV file path
* $firstRowAsKey: whether make the first row as key horizontally. or just number, duplicate will not be over writed
* $columnAsKey: whether to set key(column name or column index) column vertically. or just number, duplicate will not be over writed
* $columnAsVal: Array or Single Column name or column index from 0, whether to filte columns
* $smartFlat:if horizontally array only have one key, then falt it.
*
* For Example: CSV(this methord will take care of sjis utf8 encode problem)
* name,point
* Joe,2
* Peter,321
* Jane,34
*
* $firstRowAsKey = true, $columnAsKey = null, $columnsAsVal = null
* Array([0] => Array([name] => Joe, [point] => 2), [1] => Array([name] => Peter,[point] => 321), [2] => Array([name] => Jane, [point] => 34))
*
* firstRowAsKey = false, $columnAsKey = 0, $columnsAsVal = null
* Array([name] => Array([0] => name, [1] => point), [Joe] => Array([0] => Joe, [1] => 2), [Peter] => Array([0] => Peter, [1] => 321), [Jane] => Array([0] => Jane, [1] => 34))
*
* firstRowAsKey = true, $columnAsKey = 'name', $columnsAsVal = point
* Array([Joe] => Array([point] => 2), [Peter] => Array([point] => 321), [Jane] => Array([point] => 34))
*/
function readArrayCSV($csvPath, $firstRowAsKey = true, $columnAsKey = null, $columnsAsVal = null, $smartFlat = true) {
$sjis = file_get_contents($csvPath);
$utf8 = mb_convert_encoding($sjis, 'UTF-8', 'SJIS-win');
$temp = tempnam(sys_get_temp_dir(), 'TMP_');
file_put_contents($temp, $utf8);
$csv = file($temp, FILE_IGNORE_NEW_LINES);
if ($firstRowAsKey) {
$titles = explode(",", array_shift($csv));
$csv = array_map('str_getcsv', $csv);
$csv = array_map(function ($row) use ($titles) {
return array_combine($titles, $row);
},$csv);
} else {
$csv = array_map('str_getcsv', $csv);
}
if ($columnAsKey !== null) {
$result = array();
if (is_int($columnAsKey) && $columnAsKey > 0) $columnAsKey--;
foreach ($csv as $row) {
if (isset($row[$columnAsKey])) {
$row_filtered = $row;
if ($columnsAsVal !== null) {
$row_filtered = array_intersect_key($row, array_flip((array)$columnsAsVal));
}
$result[$row[$columnAsKey]] = ($smartFlat?(count($row_filtered) == 1?array_shift(array_values($row_filtered)):$row_filtered):$row_filtered);
}
}
} else {
$result = $csv;
}
return $result;
}
2019年3月25日月曜日
mysql グループ毎、最初のレコードを取得 Select first recorder in every group
方法1:
方法2:
SELECT * FROM
(
SELECT * FROM `table`
ORDER BY AnotherColumn
) t1
GROUP BY SomeColumn
;
方法2:
SELECT somecolumn, anothercolumn
FROM sometable
WHERE id IN (
SELECT min(id)
FROM sometable
GROUP BY somecolumn
);
2018年8月2日木曜日
複数PDFを一括印刷する、PDF毎の一枚目は飛ばす。ドラッグアンドドロップ
ラベル:
javascript,
pdf,
vba,
vbs
'//Bath Print multiple pdfs without the first page
'//複数PDFを一括印刷する、PDF毎の一枚目は飛ばす。ドラッグアンドドロップでできます
set WshShell = CreateObject ("Wscript.Shell")
set fs = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
if objArgs.Count < 1 then
msgbox("Please drag a file on the script")
WScript.quit
end if
Set gApp = CreateObject("AcroExch.App")
gApp.show '<- br="" comment="" hidden="" in="" mod="" or="" out="" take="" to="" work="">
'open via Avdoc and print
for i=0 to objArgs.Count - 1
FileIn = ObjArgs(i)
Set AVDoc = CreateObject("AcroExch.AVDoc")
If AVDoc.Open(FileIn, "") Then
Set PDDoc = AVDoc.GetPDDoc()
Set JSO = PDDoc.GetJSObject
x = PDDoc.GetNumPages
jso.print false, 1, x-1, true
gApp.CloseAllDocs
end if
next
gApp.hide : gApp.exit : Quit()
MsgBox "Done!"
Sub Quit
Set JSO = Nothing : Set PDDoc = Nothing : Set gApp =Nothing : Wscript.quit
End Sub
2018年6月29日金曜日
同じ時刻じゃないの?!!という罠
?cdate("2014/01/02 16:05:00") = dateadd("n",5,cdate("2014/01/02 16:00:00"))
False
?cdate("2014/01/02 16:05:00") - dateadd("n",5,cdate("2014/01/02 16:00:00"))
7.27595761418343E-12
おかしいでしょう! 16:05:00は16:00:00に5分足すじゃない!
参考ここ:
https://www.reddit.com/r/vba/comments/5mdnpb/pic_of_my_data_mismatch_problem/
http://www.fmsinc.com/tpapers/math/index.html
DateDiff("s", cdate("2014/01/02 16:05:00"), dateadd("n",5,cdate("2014/01/02 16:00:00"))) = 0
2018年1月23日火曜日
薄い原稿をスキャンするときのコツ
薄い原稿をスキャンするときのコツ
1.DPIを最高に
2.濃度を最高に
3.黒白2色にする
4.シャープネスを最高に
5.コントラストを最高に
↓
スキャン
↓
画像処理ソフトで:フィルター(ノイズ除去3%)実施
↓
終わり
※画像になるようにスキャナーを設定する場合、Tiffしか選べない機械があります。
Tiff画像にした場合、複数枚スキャン図が一つのTiffファイルなります。
print to snagit editorなどを活用して、一旦snagitに変換して、excelやwordなどに
コピー貼り付けして使う。
1.DPIを最高に
2.濃度を最高に
3.黒白2色にする
4.シャープネスを最高に
5.コントラストを最高に
↓
スキャン
↓
画像処理ソフトで:フィルター(ノイズ除去3%)実施
↓
終わり
※画像になるようにスキャナーを設定する場合、Tiffしか選べない機械があります。
Tiff画像にした場合、複数枚スキャン図が一つのTiffファイルなります。
print to snagit editorなどを活用して、一旦snagitに変換して、excelやwordなどに
コピー貼り付けして使う。
2018年1月9日火曜日
DBバックアップスクリプト
backup_mydb.sh、※「--ignore-table」は一部のテーブルを除外するときに使う
実行権限を付けます
そしてcron設定、毎月1日零時10分くらいバックアップを取る+一年前のバックアップを削除
#!/bin/sh
dirpath='/home/admin/mydb_dump/dump'
filename=`date +%Y%m%d`
mysqldump -uDB_USER -pDB_PASSWORD DB_NAME --ignore-table=mydb.table1 --ignore-table=mydb.table2 > $dirpath/mydb_$filename.dump
chmod 700 $dirpath/mydb_$filename.dump
tar cpzvf $dirpath/mydb_$filename.dump.tar.gz $dirpath/mydb_$filename.dump
rm -f $dirpath/mydb_$filename.dump
find $dirpath/mydb_????????.dump.tar.gz -type f -mtime +365 -ls -exec rm -f -- {} \;
実行権限を付けます
chmod +x backup_mydb_db.sh
そしてcron設定、毎月1日零時10分くらいバックアップを取る+一年前のバックアップを削除
crontab -e
10 0 1 * * /home/admin/mydb_dump/backup_mydb.sh
2017年9月22日金曜日
文字列の数字をサマリー Sum string number
数字なんだけど、文字列として表示せざるを得ない場合もある。その場合、この一列の数字を「SUM」するとうまくいかない場合があるみたい。AB4:AB100をサマリーする場合、
ソリューションとして「=VALUE(AB4)」の補助列を追加することは考えられますが、「=SUMPRODUCT(AB4:AB100 *1)」という方法もできるみたいです。
ソリューションとして「=VALUE(AB4)」の補助列を追加することは考えられますが、「=SUMPRODUCT(AB4:AB100 *1)」という方法もできるみたいです。
2017年9月7日木曜日
「_xlfn.IFERROR」という #NAME?エラー見えない「名前定義」にエラーがあった場合
下記の王なメソッドを作って、一旦エラーになっている名前定義を見える化にして、そして「名前」一覧から手動で削除して、ブックを保存
Sub delErrNames()
Dim n As name
Dim bk As Workbook
Set bk = ThisWorkbook
For Each n In bk.Names
If n.RefersTo = "=#NAME?" Then
n.Visible = True
End If
Next
End Sub
2017年6月15日木曜日
Google APIを利用して、PHPで2つの住所の距離と所要時間を取得する
Google APIを利用して、PHPで2つの住所の距離と所要時間を取得するサンプル※車での移動距離と所要時間
status;
if ( $status == 'ZERO_RESULTS' )
{
return FALSE;
}
else
{
$return = array('lat' => $response_a->results[0]->geometry->location->lat, 'long' => $long = $response_a->results[0]->geometry->location->lng);
return $return;
}
}
function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
return array('distance' => $dist, 'time' => $time);
}
//Usage:
$coordinates1 = get_coordinates('東京都三鷹市上連雀8丁目3番3号');
$coordinates2 = get_coordinates('東京都千代田区富士見2-4-1');
if ( !$coordinates1 || !$coordinates2 )
{
echo 'Bad address.';
}
else
{
$dist = GetDrivingDistance($coordinates1['lat'], $coordinates2['lat'], $coordinates1['long'], $coordinates2['long']);
echo 'Distance: '.$dist['distance'].'
Travel time duration: '.$dist['time'].'';
}
こんな風に結果が表示されます:
Distance: 22,3 km
Travel time duration: 40 min
2017年6月9日金曜日
GHOST BREAKPOINT,VBA ブレークポイント設置してないのに、急にいちいち止まるようになる件
解決方法
1.Debugに入って(そもそも止まらないなら、とりあえずなんかのsubを作成して、PBを置いて止める)
2.Ctrl+Pauseを2回押す
3.Playで継続
4.保存
1.Debugに入って(そもそも止まらないなら、とりあえずなんかのsubを作成して、PBを置いて止める)
2.Ctrl+Pauseを2回押す
3.Playで継続
4.保存
登録:
投稿 (Atom)
