質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Q&A

解決済

1回答

1343閲覧

VBAでCSVファイル特定列を暗号化

etoshhy

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

0グッド

0クリップ

投稿2020/07/02 09:38

編集2020/07/02 09:41

やりたいこと

カンマ区切りcsvの特定列を暗号化する

条件
・元のファイルを編集する形式
・大容量データのため、Excelシートなど別ファイルに書き込む方式採用しない

(元データ)

1,001,229,222 2,003,898,333

(プログラム実施後)
2,4列を指定して、

1,暗号データ,229,暗号データ 2,暗号データ,898,暗号データ

実施中の方針

①列を指定してデータを1つずつ読み込み
②暗号化
③列を指定してデータを書き込み

できたところ

①Input関数で実施

Dim n As Integer, i As Integer Dim str1 As String, str2 As String, str3 As String n = 1 Open "xxxxxxxx\test.csv" For Input As #n Do While Not EOF(n) i = i + 1 Input #n, str1, str2

②ASCIIコードから5を引く方法で実施

For i = 1 To Len(str1) 'ASCIIコードから5を引く s1 = s1 & Chr(Asc(Mid(str1, i, 1)) - 5) Next

できていないところ

③列を指定してデータを書き込み

ここに関して良い方法が見つからず・・・

output関数だと元データが消えてしまう。
append関数だと元データの下に暗号化が書き込まれる状態になる。


素人すぎる質問で恐縮ですが、教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/07/02 10:19

条件がかなり厳しいですね。 > ・元のファイルを編集する形式 これは、一時ファイルに書き出したりする方法が使えないということでしょうか? そうであれば、ランダムアクセスによる可変長データの書き込みを実現させないと無理でないかと...
guest

回答1

0

ベストアンサー

可変長のテキストファイルを直に更新するのは難しいです。
なので、編集用のテンポラリファイルに一旦作成したのち、元ファイルを削除、テンポラリファイルを元のファイル名にリネームがよくある手法です。
元ファイルを直接更新しないので、仮に更新に失敗しても元ファイルが守られるというメリットもあります。

処理の流れとしては次のような感じにするとよいかと思います。

  1. 元ファイルオープン
  2. テンポラリファイルオープン
  3. 元ファイル1行読み込み
  4. Split関数で配列化
  5. 各列再構成
  6. Join関数で文字列化
  7. テンポラリファイルに出力
  8. 元ファイルを読み終わるまで3から繰り返す
  9. 元ファイルクローズ
  10. テンポラリファイルクローズ
  11. 元ファイル削除
  12. テンポラリファイル名変更

4~6のあたりは具体的なコードにするとこんな感じかと。

VBA

1cols = Split(line, ",") 2cols(0) = cols(0) ' そのまま 3cols(1) = cols(1)を使って暗号化 4cols(2) = cols(2) ' そのまま 5cols(3) = cols(3)を使って暗号化 6line = Join(cols, ",")

投稿2020/07/03 00:38

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問