PowerShellスクリプトファイル(.ps1)にファイルをドラッグ&ドロップして処理する

普通にはできないのでbatファイルと組み合わせる。

バッチファイル(.bat)記述例
・example.bat

@echo off
powershell -ExecutionPolicy Unrestricted -File %0\..\example.ps1 %*

スクリプトファイル(.ps1)記述例
・example.ps1

foreach ($arg in $args) {
  // do something.
}

ネタ元

powershellでFTPファイルアップロード

引数でアップロードするファイル指定するバージョン

hogehoge.ps1として保存

foreach ($arg in $args) {

	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
	
	$filename = $(Get-ChildItem $arg).Name

	#「検証プロシージャによると、リモート証明書は無効です。」みたいなエラーが出たら、サーバー証明書の警告を無視するようにスクリプト内で宣言
	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

	$ftpReq = [System.Net.FtpWebRequest]::Create("ftp://FTPサーバーのアドレス/" + $filename)
	$ftpReq.Credentials = New-Object System.Net.NetworkCredential("ユーザー名","パスワード")
	$ftpReq.Method = [System.Net.WebRequestMethods+ftp]::UploadFile
	$ftpReq.EnableSsl = $true
	$ftpReq.KeepAlive = $true
	$ftpReq.UseBinary = $true
	$ftpReq.UsePassive = $true
	$ftpReq.TimeOut = 10000

	$stream = $ftpReq.GetRequestStream()
	$fileStream = New-Object System.IO.FileStream($zipfile, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
	$bytes = New-Object System.Byte[](1024)
	while($true){
		$size = $fileStream.Read($bytes, 0, $bytes.Length)
		if($size -eq 0){
			break;
		}
		$stream.Write($bytes, 0, $size)
	}
	$fileStream.Close()
	$stream.Close()

}

batファイルでは

PowerShell -ExecutionPolicy RemoteSigned -file hogehoge.ps1 アップロードしたいファイル名

ExcelVBAで特定のセル範囲が変更されたときに処理を実行する

Intersectメソッドと、ワークシートのChangeイベントを組み合わせることで、特定のセル範囲が変更されたときのみ処理を実行することができます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A1:B5")) Is Nothing Then
        Exit Sub
    Else
        MsgBox "セルの値が変更されました"
    End If
End Sub

ネタ元